From 832d884c8578661d5f9e1c5be3847a5753640e51 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 18 Mar 2025 19:22:20 +1100
Subject: [PATCH] New Crowdin translations by GitHub Action (#9314)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
---
 .../InvenTree/locale/ar/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/bg/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/cs/LC_MESSAGES/django.po | 1670 ++++++++--------
 .../InvenTree/locale/da/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/de/LC_MESSAGES/django.po | 1670 ++++++++--------
 .../InvenTree/locale/el/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/en/LC_MESSAGES/django.po | 1666 ++++++++--------
 .../InvenTree/locale/es/LC_MESSAGES/django.po | 1670 ++++++++--------
 .../locale/es_MX/LC_MESSAGES/django.po        | 1670 ++++++++--------
 .../InvenTree/locale/et/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/fa/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/fi/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/fr/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/he/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/hi/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/hu/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/id/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/it/LC_MESSAGES/django.po | 1670 ++++++++--------
 .../InvenTree/locale/ja/LC_MESSAGES/django.po | 1670 ++++++++--------
 .../InvenTree/locale/ko/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/lt/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/lv/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/nl/LC_MESSAGES/django.po | 1704 +++++++++--------
 .../InvenTree/locale/no/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/pl/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/pt/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../locale/pt_BR/LC_MESSAGES/django.po        | 1670 ++++++++--------
 .../InvenTree/locale/ro/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/ru/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/sk/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/sl/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/sr/LC_MESSAGES/django.po | 1670 ++++++++--------
 .../InvenTree/locale/sv/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/th/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/tr/LC_MESSAGES/django.po | 1670 ++++++++--------
 .../InvenTree/locale/uk/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../InvenTree/locale/vi/LC_MESSAGES/django.po | 1668 ++++++++--------
 .../locale/zh_Hans/LC_MESSAGES/django.po      | 1670 ++++++++--------
 .../locale/zh_Hant/LC_MESSAGES/django.po      | 1670 ++++++++--------
 src/frontend/src/locales/ar/messages.po       | 1255 ++++++------
 src/frontend/src/locales/bg/messages.po       | 1255 ++++++------
 src/frontend/src/locales/cs/messages.po       | 1257 ++++++------
 src/frontend/src/locales/da/messages.po       | 1255 ++++++------
 src/frontend/src/locales/de/messages.po       | 1277 ++++++------
 src/frontend/src/locales/el/messages.po       | 1255 ++++++------
 src/frontend/src/locales/en/messages.po       | 1277 ++++++------
 src/frontend/src/locales/es/messages.po       | 1277 ++++++------
 src/frontend/src/locales/es_MX/messages.po    | 1277 ++++++------
 src/frontend/src/locales/et/messages.po       | 1261 ++++++------
 src/frontend/src/locales/fa/messages.po       | 1255 ++++++------
 src/frontend/src/locales/fi/messages.po       | 1255 ++++++------
 src/frontend/src/locales/fr/messages.po       | 1277 ++++++------
 src/frontend/src/locales/he/messages.po       | 1259 ++++++------
 src/frontend/src/locales/hi/messages.po       | 1255 ++++++------
 src/frontend/src/locales/hu/messages.po       | 1265 ++++++------
 src/frontend/src/locales/id/messages.po       | 1259 ++++++------
 src/frontend/src/locales/it/messages.po       | 1259 ++++++------
 src/frontend/src/locales/ja/messages.po       | 1279 +++++++------
 src/frontend/src/locales/ko/messages.po       | 1255 ++++++------
 src/frontend/src/locales/lt/messages.po       | 1255 ++++++------
 src/frontend/src/locales/lv/messages.po       | 1255 ++++++------
 src/frontend/src/locales/nl/messages.po       | 1299 +++++++------
 src/frontend/src/locales/no/messages.po       | 1273 ++++++------
 src/frontend/src/locales/pl/messages.po       | 1261 ++++++------
 src/frontend/src/locales/pt/messages.po       | 1275 ++++++------
 src/frontend/src/locales/pt_BR/messages.po    | 1277 ++++++------
 src/frontend/src/locales/ro/messages.po       | 1255 ++++++------
 src/frontend/src/locales/ru/messages.po       | 1275 ++++++------
 src/frontend/src/locales/sk/messages.po       | 1255 ++++++------
 src/frontend/src/locales/sl/messages.po       | 1259 ++++++------
 src/frontend/src/locales/sr/messages.po       | 1279 +++++++------
 src/frontend/src/locales/sv/messages.po       | 1273 ++++++------
 src/frontend/src/locales/th/messages.po       | 1255 ++++++------
 src/frontend/src/locales/tr/messages.po       | 1277 ++++++------
 src/frontend/src/locales/uk/messages.po       | 1259 ++++++------
 src/frontend/src/locales/vi/messages.po       | 1275 ++++++------
 src/frontend/src/locales/zh_Hans/messages.po  | 1279 +++++++------
 src/frontend/src/locales/zh_Hant/messages.po  | 1279 +++++++------
 78 files changed, 62528 insertions(+), 51959 deletions(-)

diff --git a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po
index dd42453820..dc37735b37 100644
--- a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Arabic\n"
 "Language: ar_SA\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "نقطة نهاية API غير موجودة"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "المستخدم ليس لديه الصلاحية لعرض هذا النموذج"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "تعذّر تحويل {original} إلى {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "الكمية المقدمة غير صحيحة"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "القيمة '{name}' لا تظهر في تنسيق النمط"
 msgid "Provided value does not match required pattern: "
 msgstr "القيمة المقدمة لا تتطابق مع النمط المطلوب: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "سلسلة الرقم التسلسلي فارغة"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "تكرار التسلسل"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "نطاق المجموعة {group} يتجاوز الكَمّيَّة المسموح بها ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "لم يتم العثور على أرقام متسلسلة"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "عدد الأرقام المسلسلة الفريدة ({len(serials)}) يجب أن يتطابق مع الكمية ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "إزالة علامات HTML من هذه القيمة"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr ""
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "البريد الإلكتروني"
 
@@ -391,19 +403,19 @@ msgstr ""
 msgid "Invalid choice"
 msgstr ""
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr ""
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr ""
 msgid "Description (optional)"
 msgstr ""
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr ""
 
@@ -510,28 +522,28 @@ msgstr ""
 msgid "Invalid value for overage"
 msgstr ""
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr ""
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr ""
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr ""
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr ""
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr ""
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr ""
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr ""
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr ""
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr ""
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr ""
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr ""
 msgid "Reference"
 msgstr ""
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr ""
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr ""
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr ""
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr ""
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr ""
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr ""
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr ""
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr ""
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr ""
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr ""
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr ""
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr ""
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr ""
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr ""
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr ""
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr ""
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr ""
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr ""
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr ""
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr ""
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr ""
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr ""
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr ""
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr ""
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr ""
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr ""
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr ""
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr ""
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr ""
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr ""
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr ""
 
@@ -1034,10 +1057,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr ""
 
@@ -1053,7 +1076,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr ""
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr ""
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr ""
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr ""
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr ""
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr ""
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr ""
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr ""
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr ""
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr ""
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr ""
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr ""
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr ""
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr ""
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr ""
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr ""
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr ""
 
@@ -2415,7 +2438,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr ""
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr ""
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr ""
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr ""
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr ""
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr ""
 
@@ -3713,7 +3736,7 @@ msgstr ""
 msgid "Select supplier"
 msgstr ""
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr ""
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr ""
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr ""
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr ""
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr ""
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr ""
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr ""
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr ""
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr ""
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr ""
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr ""
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr ""
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr ""
 
diff --git a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po
index e0a48a846b..456d993e7b 100644
--- a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Bulgarian\n"
 "Language: bg_BG\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "Не е намерена крайна точка на API"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Потребителя няма нужното разрешение, за да вижда този модел"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "Преобразуването на {original} в {unit} не беше успешно"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Въведена е недопустима стойност"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "Значението '{name}' не отговаря на шаблона"
 msgid "Provided value does not match required pattern: "
 msgstr "Въведеното значение не отговаря на задължителния шаблон: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Липсва сериен номер"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Повтарящ се сериен номер"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Не са открити серийни номера"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Премахнете HTML маркерите от тази стойност"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr "Китайски (традиционен)"
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr ""
 
@@ -391,19 +403,19 @@ msgstr ""
 msgid "Invalid choice"
 msgstr ""
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr ""
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr ""
 msgid "Description (optional)"
 msgstr ""
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr ""
 
@@ -510,28 +522,28 @@ msgstr ""
 msgid "Invalid value for overage"
 msgstr ""
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr ""
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr "Част"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr ""
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr ""
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr ""
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr ""
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr ""
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr ""
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr ""
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr ""
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr ""
 msgid "Reference"
 msgstr ""
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr ""
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr ""
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr ""
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr ""
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr ""
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr ""
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr ""
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr ""
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr ""
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr ""
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr ""
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr ""
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr ""
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr ""
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr ""
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr ""
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr ""
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr ""
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr ""
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr ""
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr ""
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr ""
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr ""
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr ""
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr ""
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr ""
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr ""
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr ""
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr ""
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr ""
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr ""
 
@@ -1034,10 +1057,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr ""
 
@@ -1053,7 +1076,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr ""
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr ""
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr ""
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr ""
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Потребител"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr ""
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr ""
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr ""
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr ""
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr ""
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr ""
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr ""
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr ""
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr ""
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr ""
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr ""
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr ""
 
@@ -2415,7 +2438,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr ""
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr ""
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr ""
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr ""
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr ""
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr ""
 
@@ -3713,7 +3736,7 @@ msgstr ""
 msgid "Select supplier"
 msgstr ""
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr ""
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr ""
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr ""
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr ""
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Изпратено"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr ""
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr "Цялостна наличност"
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr ""
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr ""
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr ""
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr ""
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr ""
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr ""
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr ""
 
diff --git a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po
index ad13ecdfae..730bcf4834 100644
--- a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Czech\n"
 "Language: cs_CZ\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "API endpoint nebyl nalezen"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr "Zadán neplatný seznam položek"
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr "Poskytnuty neplatné filtry"
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
-msgstr "Nebyly nalezeny žádné položky k odstranění"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
+msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Uživatel nemá právo zobrazit tento model"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "Nelze převést {original} na {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Vyplněno neplatné množství"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr "Neplaté desetinné číslo"
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "Hodnota '{name}' neodpovídá formátu vzoru"
 msgid "Provided value does not match required pattern: "
 msgstr "Poskytnutá hodnota neodpovídá požadovanému vzoru: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr "Nelze serializovat více než 1000 položek najednou"
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Nevyplněné výrobní číslo"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Duplicitní výrobní číslo"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr "Neplatná skupina: {group}"
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "Rozsah skupiny {group} překračuje povolené množství ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Nenalezena žádná výrobní čísla"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Počet jedinečných sériových čísel ({len(serials)}) musí odpovídat množství ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Odstranit HTML tagy z této hodnoty"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr "Data obsahují zakázaný markdown obsah"
 
@@ -339,7 +351,7 @@ msgstr "Čínština (tradiční)"
 msgid "Log in to the app"
 msgstr "Přihlásit se do aplikace"
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "E-mail"
 
@@ -391,19 +403,19 @@ msgstr "Duplicitní názvy nemohou existovat pod stejným nadřazeným názvem"
 msgid "Invalid choice"
 msgstr "Neplatný výběr"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Název"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Popis"
 msgid "Description (optional)"
 msgstr "Popis (volitelně)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Cesta"
 
@@ -510,28 +522,28 @@ msgstr "Nesmí přesáhnout 100%"
 msgid "Invalid value for overage"
 msgstr "Neplatná hodnota překročení"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "Stav objednávky"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Nadřazená sestava"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr "Zahrnout varianty"
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr "Zahrnout varianty"
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr "Zahrnout varianty"
 msgid "Part"
 msgstr "Díl"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "Kategorie"
 
@@ -612,90 +623,102 @@ msgstr "Dokončeno před"
 msgid "Completed after"
 msgstr "Dokončeno po"
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "Sestavení musí být zrušeno před odstraněním"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "Spotřební materiál"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Volitelné"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "Sestava"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Sledováno"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr "Testovatelné"
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Přiděleno"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Dostupné"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Výrobní příkaz"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Výrobní příkazy"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr "Kusovník sestavy ještě nebyl schválen"
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr "Výrobní příkaz nesmí být vytvořen pro neaktivní díl"
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Neplatná volba nadřazeného sestavení"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "Musí být specifikován odpovědný uživatel nebo skupina"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "Díl výrobního příkazu nelze změnit"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Referenční číslo výrobního příkazu"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Referenční číslo výrobního příkazu"
 msgid "Reference"
 msgstr "Reference"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "Stručný popis sestavení (nepovinné)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "Výrobní příkaz, kterému je tento výrobní příkaz přidělen"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Vyber téma, které chceš stavět"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Referenční číslo prodejní objednávky"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Prodejní objednávka, které je tento výrobní příkaz přidělen"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Zdrojové umístění"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Vyberte lokaci, ze které chcete brát zásoby pro sestavu (nechte prázdné, chcete-li brát zásoby z libovolné lokace)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Cílová lokace"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Vyberte lokaci, kde budou dokončené položky uloženy"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Množství sestav"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Počet skladových položek k sestavení"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Dokončené položky"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Počet skladových položek, které byly dokončeny"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Stav sestavení"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Stavový kód sestavení"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Kód dávky"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Dávkový kód pro tento výstup sestavení"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Datum vytvoření"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Cílové datum dokončení"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Cílové datum dokončení sestavení. Sestavení bude po tomto datu v prodlení."
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Datum dokončení"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "dokončil"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Vystavil"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "Uživatel, který vystavil tento výrobní příkaz"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Odpovědný"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "Uživatel nebo skupina odpovědná za tento výrobní příkaz"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Externí odkaz"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Odkaz na externí URL"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "Priorita sestavení"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "Priorita tohoto výrobního příkazu"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "Kód projektu"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "Kód projektu pro tento výrobní příkaz"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr "Nepodařilo se uvolnit úlohu pro dokončení přidělení sestavy"
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "Výrobní příkaz {build} byl dokončen"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "Výrobní příkaz byl dokončen"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr "U sledovatelných dílů musí být uvedena sériová čísla"
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "Nebyl specifikováno žádný výstup sestavení"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "Výstup sestavení je již dokončen"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "Výstup neodpovídá výrobnímu příkazu"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "Množství musí být vyšší než nula"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "Množství nemůže být větší než výstupní množství"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "Výstup sestavy {serial} neprošel všemi požadavky"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr "Řádková položka výrobního příkazu"
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "Vytvořit objekt"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "Vytvořit objekt"
 msgid "Quantity"
 msgstr "Množství"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "Vyžadované množství pro výrobní příkaz"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "Položka sestavení musí specifikovat výstup sestavení, protože hlavní díl je označen jako sledovatelný"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "Zabrané množství ({q}) nesmí překročit dostupné skladové množství ({a})"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "Skladová položka je nadměrně zabrána"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "Zabrané množství musí být větší než nula"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "Množství musí být 1 pro zřetězený sklad"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "Vybraná skladová položka neodpovídá řádku kusovníku"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "Vybraná skladová položka neodpovídá řádku kusovníku"
 msgid "Stock Item"
 msgstr "Skladové položky"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Zdrojová skladová položka"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Skladové množství pro sestavení"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Instalovat do"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Cílová skladová položka"
 
@@ -1034,10 +1057,10 @@ msgstr "Zadejte sériová čísla pro sestavení výstupů"
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Lokace"
 
@@ -1053,7 +1076,7 @@ msgstr "Automaticky zvolit sériová čísla"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "Automaticky přidělit požadované položky s odpovídajícími sériovými čísly"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "Následující sériová čísla již existují nebo jsou neplatná"
@@ -1082,10 +1105,10 @@ msgstr "Důvod vyřazení výstupu(ů) sestavy"
 msgid "Location for completed build outputs"
 msgstr "Umístění dokončených výstupů sestavy"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Stav"
 
@@ -1270,8 +1293,8 @@ msgstr "Název dílu kusovníku"
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr "Díl dodavatele"
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr "Povolit varianty"
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "Položka kusovníku"
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr "Přidělené zásoby"
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr "Na objednávku"
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr "Ve výrobě"
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr "Externí zásoby"
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "Dostupné zásoby"
 
@@ -1356,7 +1379,7 @@ msgstr "Zrušeno"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Hotovo"
 
@@ -1405,536 +1428,536 @@ msgstr "Nejsou uvedeny žádné platné kódy měn"
 msgid "No plugin"
 msgstr "Žádný plugin"
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "Aktualizováno"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "Časové razítko poslední aktualizace"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "Jedinečný kód projektu"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "Popis projektu"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr "Uživatel nebo skupina odpovědná za tento projekt"
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "Hodnota nastavení"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr "Zvolená hodnota není platnou možností"
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr "Hodnota musí být logická hodnota"
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr "Hodnota musí být celé číslo"
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr "Hodnota musí být platné číslo"
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr "Hodnota neprošla kontrolou platnosti"
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr "Klíčový text musí být jedinečný"
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Uživatel"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr "Množství cenové slevy"
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "Cena"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr "Jednotková cena při stanoveném množství"
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr "Koncový bod"
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr "Koncový bod, ve kterém je tento webhook přijímán"
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr "Název tohoto webhooku"
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Aktivní"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr "Je tento webhook aktivní"
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr "Token"
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr "Token pro přístup"
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "Tajný klíč"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr "Sdílený tajný klíč pro HMAC"
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr "ID zprávy"
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr "Unikátní identifikátor pro tuto zprávu"
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr "Hostitel"
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr "Hostitel, od kterého byla tato zpráva přijata"
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr "Záhlaví"
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr "Záhlaví této zprávy"
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr "Tělo"
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr "Tělo zprávy"
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr "Koncový bod, na kterém byla zpráva přijata"
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr "Pracoval na"
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr "Byla práce na této zprávě dokončena?"
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr "ID"
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "Název"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Odkaz"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "Zveřejněno"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "Autor"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "Souhrn"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr "Přečteno"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr "Byla tato novinka přečtena?"
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "Obrazek"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "Soubor obrázku"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr "Cílový typ modelu pro tento obrázek"
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr "Cílové ID modelu pro tento obrázek"
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr "Název jednotky musí být platný identifikátor"
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr "Název jednotky"
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr "Symbol"
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr "Volitelný symbol jednotky"
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr "Definice"
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr "Definice jednotky"
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Příloha"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Chybějící soubor"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Chybějící externí odkaz"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Vyberte soubor k přiložení"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Komentář"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr "Komentář přílohy"
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr "Datum nahrání"
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr "Datum, kdy byl soubor nahrán"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr "Velikost souboru"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr "Velikost souboru v bytech"
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr "Uveden neplatný typ modelu pro přílohu"
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "Hodnota"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr "Název stavu"
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr "Barva"
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr "Barva, která bude zobrazena ve frontendu"
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr "Model"
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr "Model, ke kterému je tento stav přiřazen"
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr "Musí být vybrán model"
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr "Musí být vybrán klíč"
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr "Musí být vybrán logický klíč"
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr "Klíč se musí lišit od logického klíče"
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr "Zdrojový plugin"
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "Vytvořeno"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr "Poslední aktualizace"
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr "Data"
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr "Data čárového kódu"
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr "Uživatel, který naskenoval čárový kód"
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr "Datum a čas skenování čárového kódu"
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr "Kontext"
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr "Výsledek"
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr "Bylo skenování čárového kódu úspěšné?"
 
@@ -1956,7 +1979,7 @@ msgstr "{verbose_name} zrušeno"
 msgid "A order that is assigned to you was canceled"
 msgstr "Objednávka, která je vám přidělena, byla zrušena"
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr "Přijaté položky"
 
@@ -2036,7 +2059,7 @@ msgstr "Argumenty klíčových slov úlohy"
 msgid "Filename"
 msgstr "Název souboru"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr "Typ modelu"
 
@@ -2384,8 +2407,8 @@ msgstr "Kopírovat šablony parametrů kategorie"
 msgid "Copy category parameter templates when creating a part"
 msgstr "Kopírování šablon parametrů kategorie při vytváření dílu"
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "Šablona"
@@ -2398,8 +2421,8 @@ msgstr "Díly jsou ve výchozím nastavení šablony"
 msgid "Parts can be assembled from other components by default"
 msgstr "Díly lze ve výchozím nastavení sestavit z jiných komponentů"
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "Komponent"
 
@@ -2415,7 +2438,7 @@ msgstr "Možné zakoupit"
 msgid "Parts are purchaseable by default"
 msgstr "Díly jsou zakoupitelné ve výchozím nastavení"
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr "Prodejné"
 
@@ -2619,8 +2642,8 @@ msgstr "Zaznamenávat chyby reportů"
 msgid "Log errors which occur when generating reports"
 msgstr "Zaznamenávat chyby, které se vyskytnou při vytváření reportů"
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Velikost stránky"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr "Dodavatel je aktivní"
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "Výrobce"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Společnost"
 
@@ -3497,8 +3520,8 @@ msgstr "Kontaktní telefonní číslo"
 msgid "Contact email address"
 msgstr "Kontaktní e-mailová adresa"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "Kontakt"
 
@@ -3542,7 +3565,7 @@ msgstr "Vyrábí tato společnost díly?"
 msgid "Default currency used for this company"
 msgstr "Výchozí měna používaná pro tuto společnost"
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "Adresa"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr "Vyberte výrobce"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr "MPN"
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr "Odkazovaný díl výrobce musí odkazovat na stejný základní díl"
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "Dodavatel"
 
@@ -3713,7 +3736,7 @@ msgstr "Dodavatel"
 msgid "Select supplier"
 msgstr "Vyberte dodavatele"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr "Skladová evidence dodavatele"
 
@@ -3733,7 +3756,7 @@ msgstr "Adresa URL pro odkaz na externí díl dodavatele"
 msgid "Supplier part description"
 msgstr "Popis dílu dodavatele"
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr "Výchozí měna používaná pro tohoto dodavatele"
 msgid "Company Name"
 msgstr "Jméno společnosti"
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr "Skladem"
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr "Umístěno"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Datový soubor"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr "Chyby"
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr "Kopie"
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr "Počet kopií, které se mají tisknout pro každý štítek"
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr "Připojeno"
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr "Neznámý"
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr "Tisk"
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr "Žádná média"
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr "Zaseknutí papíru"
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr "Odpojeno"
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr "Tiskárna štítků"
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr "Přímo vytisknout štítky pro různé položky."
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr "Umístění tiskárny"
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr "Určení rozsahu tiskárny na konkrétní místo"
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr "Označení objednávky"
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr "Cílové datum před"
 msgid "Target Date After"
 msgstr "Cílové datum po"
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr "Dokončeno před"
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr "Dokončeno po"
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr "Objednávka"
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr "Interní díl"
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "Dokončeno"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr "Nákupní objednávka"
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr "Nákupní objednávka"
 msgid "Sales Order"
 msgstr "Prodejní objednávka"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "Celková cena"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "Cílené datum"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr "Společnost, od které se položky objednávají"
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr "Reference dodavatele"
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr "Referenční kód objednávky dodavatele"
-
-#: order/models.py:584
-msgid "received by"
-msgstr "přijal"
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr "Datum vystavení"
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr "Datum vystavení objednávky"
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr "Společnost, od které se položky objednávají"
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr "Reference dodavatele"
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr "Referenční kód objednávky dodavatele"
+
+#: order/models.py:546
+msgid "received by"
+msgstr "přijal"
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr "Datum dokončení objednávky"
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "Místo určení"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr "Dodavatel dílu se musí shodovat s dodavatelem PO"
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr "Množství musí být kladné"
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "Zákazník"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr "Společnost, jíž se položky prodávají"
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr "Stav prodejní objednávky"
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr "Reference zákazníka "
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr "Referenční kód objednávky zákazníka"
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr "Datum odeslání"
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr "odesláno společností"
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr "Objednávka je již dokončena"
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr "Objednávka je již zrušena"
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr "Pouze otevřená objednávka může být označena jako kompletní"
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr "Objednávku nelze dokončit, protože dodávky jsou nekompletní"
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr "Objednávka nemůže být dokončena, protože jsou neúplné řádkové položky"
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr "Množství položky"
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr "Označení řádkové položky"
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr "Poznámky k řádkovým položkám"
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr "Cílové datum pro tuto řádkovou položku (pro použití cílového data z objednávky ponechte prázdné)"
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr "Popis řádkové položky (nepovinné)"
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr "Dodatečný kontext pro tento řádek"
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr "Cena za jednotku"
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr "Řádková položka nákupní objednávky"
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr "Dodavatelský díl musí odpovídat dodavateli"
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr "Díl dodavatele"
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr "Doručeno"
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr "Počet přijatých položek"
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr "Nákupní cena"
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr "Jednotková nákupní cena"
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr "Řádková položka prodejní objednávky"
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr "Virtuální díl nelze přiřadit k prodejní objednávce"
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr "K prodejní objednávce lze přiřadit pouze prodejné díly"
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "Prodejní cena"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr "Jednotková prodejní cena"
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Odesláno"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr "Odeslané množství"
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr "Datum odeslání"
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr "Datum doručení"
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr "Datum doručení zásilky"
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr "Kontroloval(a)"
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr "Uživatel, který zkontroloval tuto zásilku"
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr "Doprava"
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr "Číslo zásilky"
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr "Sledovací číslo"
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr "Informace o sledování zásilky"
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr "Číslo faktury"
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr "Referenční číslo přiřazené faktury"
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr "Zásilka již byla odeslána"
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr "Zásilka nemá žádné přidělené skladové položky"
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr "Skladová položka nebyla přiřazena"
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr "Nelze přidělit skladovou položku na řádek s jiným dílem"
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr "Nelze přidělit skladovou položku na řádek bez dílu"
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr "Přidělené množství nesmí překročit množství zásob"
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr "Množství musí být 1 pro serializovanou skladovou položku"
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr "Prodejní objednávka neodpovídá zásilce"
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr "Zásilka neodpovídá prodejní objednávce"
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr "Řádek"
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr "Odkaz na zásilku z prodejní objednávky"
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr "Položka"
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr "Vyberte skladovou položku pro přidělení"
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr "Zadejte množství pro přidělení zásob"
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr "Reference návratové objednávky"
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr "Společnost, od které se vrací položky"
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr "Stav návratové objednávky"
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr "Vyberte položku pro vrácení od zákazníka"
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr "Datum přijetí"
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr "Datum přijetí této vrácené položky"
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr "Výsledek"
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr "Výsledky pro tuto položku"
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr "Náklady spojené s návratem nebo opravou této položky"
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr "Sloučit položky"
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr "Sloučit položky se stejným dílem, místem určení a cílovým datem do jedné řádkové položky"
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr "Číslo zboží (SKU)"
 
@@ -4787,7 +4830,7 @@ msgstr "Řádková položka"
 msgid "Line item does not match purchase order"
 msgstr "Řádková položka neodpovídá nákupní objednávce"
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr "Vyberte cílové umístění pro přijaté položky"
 
@@ -4811,7 +4854,7 @@ msgstr "Zadat sériová čísla pro příchozí skladové položky"
 msgid "Override packaging information for incoming stock items"
 msgstr "Přepsat informace o obalu pro příchozí skladové položky"
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr "Dodatečná poznámka pro příchozí skladové položky"
 
@@ -4831,7 +4874,7 @@ msgstr "Tento čárový kód se již používá"
 msgid "An integer quantity must be provided for trackable parts"
 msgstr "U sledovatelných dílů musí být uvedeno celočíselné množství"
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr "Musí být uvedeny řádkové položky"
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr "Stavový kód skladové položky"
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr "Opožděná prodejní objednávka"
 msgid "Sales order {so} is now overdue"
 msgstr "Prodejní objednávka {so} je nyní opožděná"
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr "Schválit celý kusovník"
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr "Je revizí"
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr "Má revize"
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr "Kusovník schválen"
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "Díly"
 
@@ -5235,7 +5274,7 @@ msgstr "Klíčová slova dílu pro zlepšení vyhledávání"
 msgid "Part category"
 msgstr "Kategorie dílu"
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr "Číslo revize nebo verze dílu"
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr "Revize"
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr "Původní díl"
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr "Vyberte původní díl, který má být duplikován"
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr "Kopírovat kusovník"
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr "Název kategorie"
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr "Skladové položky"
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "Dodavatelé"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr "Vyloučit skladové položky v externích umístěních"
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr "Aktualizovat díly"
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Kontrola procesů na pozadí se nezdařila"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr "Aktualizovat cenu pro díl"
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr "Vybrat nadřazenou sestavu"
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr "Skladová položka byla přidělena prodejní objednávce"
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr "Přeskočit štítky"
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr "Štítek je příliš velký pro velikost stránky"
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr "Nebyly vygenerovány žádné štítky"
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr "Plugin"
 
@@ -6801,21 +6940,21 @@ msgstr "Plugin"
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr "Plugin '{p}' není kompatibilní s aktuální verzí InvenTree {v}"
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr "Plugin vyžaduje alespoň verzi {v}"
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr "Plugin vyžaduje nanejvýš verzi {v}"
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr "Odstranit konfiguraci pluginu z databáze"
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr "Položky"
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr "Plugin nebyl nalezen"
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr "Plugin není aktivní"
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr "Plugin nepodporuje tisk štítků"
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr "Neplatné rozměry štítku"
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr "Legal"
 msgid "Letter"
 msgstr "Letter"
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "Filtry"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "Šířka [mm]"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr "Šířka štítku zadaná v mm"
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "Výška [mm]"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr "Výška štítku uvedená v mm"
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr "Nadřazená místo"
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr "Externí umístění"
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr "Strom dílů"
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr "Množství je povinné"
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr "Skladové položky nelze umístit přímo do strukturálních skladových umístění, ale lze je umístit do podřízených skladových umístění."
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr "Externí"
 
@@ -8356,199 +8458,199 @@ msgstr "Prodejní objednávky"
 msgid "Return Orders"
 msgstr "Návratové objednávky"
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr "Nastavení oprávnění"
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "Skupina"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "Zobrazit"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "Oprávnění k zobrazení položek"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr "Přidat"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "Oprávnění přidat položky"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "Změnit"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "Oprávnění k úpravě položek"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "Odstranit"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "Oprávnění k odstranění položek"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Uživatelské jméno"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Křestní jméno"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "Křestní jméno uživatele"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Příjmení"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "Příjmení uživatele"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "Emailová adresa uživatele"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "Personál"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr "Má tento uživatel oprávnění personálu"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr "Super-uživatel"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr "Je tento uživatel superuživatel"
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "Je tento uživatelský účet aktivní"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "Nemáte oprávnění měnit tuto uživatelskou roli."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Pouze superuživatelé mohou vytvářet nové uživatele"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "Váš účet byl vytvořen."
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "Pro přihlášení použijte funkci obnovení hesla"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "Vítejte v InvenTree"
 
diff --git a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po
index ddac182023..58e78904c5 100644
--- a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Danish\n"
 "Language: da_DK\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "API endpoint ikke fundet"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Bruger har ikke tilladelse til at se denne model"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "Kunne ikke konvertere {original} til {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Ugyldigt antal angivet"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "Værdi '{name}' vises ikke i mønsterformat"
 msgid "Provided value does not match required pattern: "
 msgstr "Den angivne værdi matcher ikke det påkrævede mønster: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Serienummer streng er tom"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Duplikeret serienummer"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Ingen serienumre fundet"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Fjern HTML-tags fra denne værdi"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr "Kinesisk (traditionelt)"
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "E-mail"
 
@@ -391,19 +403,19 @@ msgstr ""
 msgid "Invalid choice"
 msgstr "Ugyldigt valg"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Navn"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Beskrivelse"
 msgid "Description (optional)"
 msgstr "Beskrivelse (valgfri)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Sti"
 
@@ -510,28 +522,28 @@ msgstr "Overskuddet må ikke overstige 100%"
 msgid "Invalid value for overage"
 msgstr "Ugyldig værdi for overskud"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Overordnet produktion"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr "Del"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "Produktion skal anulleres, før den kan slettes"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "Forbrugsvare"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Valgfri"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Sporet"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Allokeret"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Tilgængelig"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Produktionsordre"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Produktionsordrer"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Ugyldigt valg for overordnet produktion"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "Byggeordre enhed kan ikke ændres"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Produktionsordre reference"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Produktionsordre reference"
 msgid "Reference"
 msgstr ""
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "Produktionsordre som er tildelt denne produktion"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Vælg dele til produktion"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Salgsordrereference"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Salgsordre, som er tildelt denne produktion"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Kilde Lokation"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Vælg lokation for lager, som skal benyttes til denne produktion (lad feltet stå tomt for at benytte vilkårligt lager)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Destinations Placering"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Vælg placering, hvor de færdige elementer vil blive gemt"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Produktions antal"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Antal lagervarer som skal produceres"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Afsluttede elementer"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Antal lagervarer som er færdiggjort"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Produktions Status"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Produktions statuskode"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Batch Kode"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Batch kode til dette produktions output"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Oprettelsesdato"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Projekteret afslutningsdato"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Dato for afslutning"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "udført af"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Udstedt af"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "Bruger som udstedte denne byggeordre"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Ansvarlig"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "Bruger eller gruppe ansvarlig for denne byggeordre"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Ekstern link"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Link til ekstern URL"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "Bygge Prioritet"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "Prioritet af denne byggeordre"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "Bygningsordre {build} er fuldført"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "En byggeordre er fuldført"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr ""
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr ""
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr ""
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr ""
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr ""
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr ""
 
@@ -1034,10 +1057,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr ""
 
@@ -1053,7 +1076,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr ""
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr ""
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr "Annulleret"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Fuldført"
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Bruger"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr ""
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr ""
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr ""
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Vedhæftning"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Manglende fil"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Manglende eksternt link"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Vælg fil, der skal vedhæftes"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Kommentar"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr ""
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr "Filnavn"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr ""
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr ""
 
@@ -2415,7 +2438,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr ""
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr ""
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr ""
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr ""
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr ""
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr ""
 
@@ -3713,7 +3736,7 @@ msgstr ""
 msgid "Select supplier"
 msgstr ""
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr "Placeret"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Datafil"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr ""
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr ""
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Afsendt"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr ""
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Kontrol af baggrundstjeneste mislykkedes"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr ""
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "Du har ikke tilladelse til at ændre denne brugerrolle."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Kun superbrugere kan oprette nye brugere"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr ""
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr ""
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr ""
 
diff --git a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po
index 6d43fe83ab..1dc635d0da 100644
--- a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: German\n"
 "Language: de_DE\n"
@@ -25,19 +25,31 @@ msgstr "Sie müssen die Zwei-Faktor-Authentifizierung aktivieren, bevor Sie etwa
 msgid "API endpoint not found"
 msgstr "API-Endpunkt nicht gefunden"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr "Ungültige Artikelliste angegeben"
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr "Ungültige Filter angegeben"
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
-msgstr "Keine Einträge zum Löschen gefunden"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
+msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Benutzer hat keine Berechtigung, dieses Modell anzuzeigen"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "Konnte {original} nicht in {unit} umwandeln"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Keine gültige Menge"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr "Ungültiger Dezimalwert"
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "Wert '{name}' hält das Musterformat nicht ein"
 msgid "Provided value does not match required pattern: "
 msgstr "Angegebener Wert entspricht nicht dem benötigten Muster: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr "Kann nicht mehr als 1000 Elemente auf einmal serialisieren"
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Keine Seriennummer angegeben"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Duplizierter Seriennummer"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr "Ungültige Gruppe: {group}"
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "Gruppenbereich {group} überschreitet die zulässige Menge ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Keine Seriennummern gefunden"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Anzahl der eindeutigen Seriennummern ({len(serials)}) muss mit der Menge übereinstimmen ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Entferne HTML-Tags von diesem Wert"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr "Daten enthalten verbotene Markdown-Inhalte"
 
@@ -339,7 +351,7 @@ msgstr "Chinesisch (Traditionell)"
 msgid "Log in to the app"
 msgstr "Bei der App anmelden"
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "Email"
 
@@ -391,19 +403,19 @@ msgstr "Doppelte Namen können nicht unter dem selben Elternteil existieren"
 msgid "Invalid choice"
 msgstr "Ungültige Auswahl"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Name"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Beschreibung"
 msgid "Description (optional)"
 msgstr "Beschreibung (optional)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Pfad"
 
@@ -510,28 +522,28 @@ msgstr "Überschuss darf 100% nicht überschreiten"
 msgid "Invalid value for overage"
 msgstr "Ungültiger Wert für Ausschuss"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "Bestellstatus"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Eltern-Bauauftrag"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr "Varianten einschließen"
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr "Varianten einschließen"
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr "Varianten einschließen"
 msgid "Part"
 msgstr "Teil"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "Kategorie"
 
@@ -612,90 +623,102 @@ msgstr "Abgeschlossen vor"
 msgid "Completed after"
 msgstr "Abgeschlossen nach"
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr "Baum ausschließen"
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "Bauauftrag muss abgebrochen werden, bevor er gelöscht werden kann"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "Verbrauchsmaterial"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Optional"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "Baugruppe"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Nachverfolgt"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr "Prüfbar"
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr "Offene Bestellung"
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Zugeordnet"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Verfügbar"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Bauauftrag"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Bauaufträge"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr "Die Stückliste wurde noch nicht kontrolliert"
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr "Baureihenfolge kann nicht für ein inaktives Teil erstellt werden"
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr "Baureihenfolge kann nicht für ein inaktives Teil erstellt werden"
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Ungültige Wahl für übergeordneten Bauauftrag"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "Verantwortlicher Benutzer oder Gruppe muss angegeben werden"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "Teil in Bauauftrag kann nicht geändert werden"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr "Zieldatum muss nach dem Startdatum liegen"
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Bauauftragsreferenz"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Bauauftragsreferenz"
 msgid "Reference"
 msgstr "Referenz"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "Kurze Beschreibung des Baus (optional)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Teil für den Bauauftrag wählen"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Auftrag Referenz"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Bestellung, die diesem Bauauftrag zugewiesen ist"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Quell-Lagerort"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Entnahme-Lagerort für diesen Bauauftrag wählen (oder leer lassen für einen beliebigen Lagerort)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Ziel-Lagerort"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Lagerort an dem fertige Objekte gelagert werden auswählen"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Bau-Anzahl"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Anzahl der zu bauenden Lagerartikel"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Fertiggestellte Teile"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Anzahl der fertigen Lagerartikel"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Bauauftrags-Status"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Bau-Statuscode"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Losnummer"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Losnummer für dieses Endprodukt"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Erstelldatum"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr "Startdatum des Bauauftrags"
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr "Geplantes Startdatum des Bauauftrags"
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "geplantes Fertigstellungsdatum"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Zieldatum für Bauauftrag-Fertigstellung."
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Fertigstellungsdatum"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "Fertiggestellt von"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Aufgegeben von"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "Nutzer der diesen Bauauftrag erstellt hat"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Verantwortlicher Benutzer"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "Benutzer oder Gruppe verantwortlich für diesen Bauauftrag"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Externer Link"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Link zu einer externen URL"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "Bauauftrags-Priorität"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "Priorität dieses Bauauftrags"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "Projektcode"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "Projektcode für diesen Auftrag"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr "Fehler beim Abladen der Aufgabe, um die Build-Allokation abzuschließen"
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "Bauauftrag {build} wurde fertiggestellt"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "Ein Bauauftrag wurde fertiggestellt"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr "Seriennummern müssen für nachverfolgbare Teile angegeben werden"
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "kein Endprodukt angegeben"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "Endprodukt bereits hergstellt"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "Endprodukt stimmt nicht mit dem Bauauftrag überein"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "Anzahl muss größer Null sein"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "Menge kann nicht größer als die Ausgangsmenge sein"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "Build Ausgabe {serial} hat nicht alle erforderlichen Tests bestanden"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr "Bauauftragsposition"
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "Objekt bauen"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "Objekt bauen"
 msgid "Quantity"
 msgstr "Anzahl"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "Erforderliche Menge für Auftrag"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "Bauauftragsposition muss ein Endprodukt festlegen, da der übergeordnete Teil verfolgbar ist"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "Zugewiesene Menge ({q}) darf nicht verfügbare Menge ({a}) übersteigen"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "BestandObjekt ist zu oft zugewiesen"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "Reserviermenge muss größer null sein"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "Ausgewählter Lagerbestand stimmt nicht mit BOM-Linie überein"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "Ausgewählter Lagerbestand stimmt nicht mit BOM-Linie überein"
 msgid "Stock Item"
 msgstr "Lagerartikel"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Quell-Lagerartikel"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Anzahl an Lagerartikel dem Bauauftrag zuweisen"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Installiere in"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Ziel-Lagerartikel"
 
@@ -1034,10 +1057,10 @@ msgstr "Seriennummer für dieses Endprodukt eingeben"
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Lagerort"
 
@@ -1053,7 +1076,7 @@ msgstr "Seriennummern automatisch zuweisen"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "Benötigte Lagerartikel automatisch mit passenden Seriennummern zuweisen"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "Die folgenden Seriennummern existieren bereits oder sind ungültig"
@@ -1082,10 +1105,10 @@ msgstr "Grund für das Verwerfen des Bauauftrages/der Bauaufträge"
 msgid "Location for completed build outputs"
 msgstr "Lagerort für fertige Endprodukte"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Status"
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr "Zusammenbau"
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr "Zuliefererteil"
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr "Varianten zulassen"
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "Stücklisten-Position"
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr "Zugewiesener Bestand"
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr "Bestellt"
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr "In Produktion"
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr "Externes Lager"
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "Verfügbarer Bestand"
 
@@ -1356,7 +1379,7 @@ msgstr "Storniert"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Fertig"
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr "Kein Plugin"
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "Aktualisiert"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "Zeitstempel der letzten Aktualisierung"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "Eindeutiger Projektcode"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "Projektbeschreibung"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr "Benutzer oder Gruppe verantwortlich für dieses Projekt"
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "Einstellungs-Wert"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr "Wert ist keine gültige Option"
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr "Wahrheitswert erforderlich"
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr "Nur Ganzzahl eingeben"
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr "Schlüsseltext muss eindeutig sein"
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Benutzer"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr "Preisstaffelungs Anzahl"
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "Preis"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr "Stückpreis für die angegebene Anzahl"
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr "Endpunkt"
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr "Endpunkt, an dem dieser Webhook empfangen wird"
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr "Name für diesen Webhook"
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Aktiv"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr "Ist dieser Webhook aktiv"
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr "Token"
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr "Token für Zugang"
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "Geheimnis"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr "Shared Secret für HMAC"
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr "Nachrichten-ID"
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr "Eindeutige Kennung für diese Nachricht"
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr "Host"
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr "Host von dem diese Nachricht empfangen wurde"
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr "Kopfzeile"
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr "Header dieser Nachricht"
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr "Body"
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr "Body dieser Nachricht"
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr "Endpunkt, über den diese Nachricht empfangen wurde"
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr "Bearbeitet"
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr "Wurde die Arbeit an dieser Nachricht abgeschlossen?"
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr "ID"
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "Titel"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Link"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "Veröffentlicht"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "Autor"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "Zusammenfassung"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr "Gelesen"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr "Wurde diese Nachricht gelesen?"
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "Bild"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "Bilddatei"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr "Benutzerdefinierte Einheit"
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr "Einheitensymbol muss eindeutig sein"
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr "Einheitsname muss eine gültige Kennung sein"
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr "Einheitsname"
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr "Symbol"
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr "Optionales Einheitssymbol"
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr "Definition"
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr "Einheitsdefinition"
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Anhang"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Fehlende Datei"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Fehlender externer Link"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Datei zum Anhängen auswählen"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Kommentar"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr "Upload Datum"
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr "Datum der hochgeladenen Datei"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr "Dateigröße"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr "Dateigröße in Bytes"
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr "Ungültiger Modelltyp für Anhang angegeben"
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "Wert"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr "Name des Bundeslandes"
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr "Bezeichnung"
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr "Bezeichnung, die im Frontend angezeigt wird"
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr "Farbe"
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr "Farbe, die im Frontend angezeigt wird"
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr "Name muss sich von den Namen des Referenzstatus unterscheiden"
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "Erstellt"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr "Zuletzt aktualisiert"
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr "Wert"
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr "Zeitstempel"
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr "Kontext"
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr "Ergebnis"
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr "{verbose_name} storniert"
 msgid "A order that is assigned to you was canceled"
 msgstr "Eine Bestellung, die Ihnen zugewiesen war, wurde storniert"
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr "Artikel erhalten"
 
@@ -2036,7 +2059,7 @@ msgstr "Schlüsselwort Parameter für Aufgaben"
 msgid "Filename"
 msgstr "Dateiname"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr "Modelltyp"
 
@@ -2384,8 +2407,8 @@ msgstr "Kategorie-Parametervorlage kopieren"
 msgid "Copy category parameter templates when creating a part"
 msgstr "Kategorie-Parameter Vorlagen kopieren wenn ein Teil angelegt wird"
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "Vorlage"
@@ -2398,8 +2421,8 @@ msgstr "Teile sind standardmäßig Vorlagen"
 msgid "Parts can be assembled from other components by default"
 msgstr "Teile können standardmäßig aus anderen Teilen angefertigt werden"
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "Komponente"
 
@@ -2415,7 +2438,7 @@ msgstr "Kaufbar"
 msgid "Parts are purchaseable by default"
 msgstr "Artikel sind grundsätzlich kaufbar"
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr "Verkäuflich"
 
@@ -2619,8 +2642,8 @@ msgstr "Berichtsfehler protokollieren"
 msgid "Log errors which occur when generating reports"
 msgstr "Fehler, die beim Erstellen von Berichten auftreten, protokollieren"
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Seitengröße"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr "Lieferant ist aktiv"
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "Hersteller"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Firma"
 
@@ -3497,8 +3520,8 @@ msgstr "Kontakt-Telefon"
 msgid "Contact email address"
 msgstr "Kontakt-Email"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "Kontakt"
 
@@ -3542,7 +3565,7 @@ msgstr "Produziert diese Firma Teile?"
 msgid "Default currency used for this company"
 msgstr "Standard-Währung für diese Firma"
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "Adresse"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr "Hersteller auswählen"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr "MPN"
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr "Verlinktes Herstellerteil muss dasselbe Basisteil referenzieren"
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "Zulieferer"
 
@@ -3713,7 +3736,7 @@ msgstr "Zulieferer"
 msgid "Select supplier"
 msgstr "Zulieferer auswählen"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr "Lagerbestandseinheit (SKU) des Zulieferers"
 
@@ -3733,7 +3756,7 @@ msgstr "Teil-URL des Zulieferers"
 msgid "Supplier part description"
 msgstr "Zuliefererbeschreibung des Teils"
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr "Standard-Währung für diesen Zulieferer"
 msgid "Company Name"
 msgstr "Firmenname"
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr "Auf Lager"
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr "Platziert"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr "Ungültiges Exportformat"
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Datendatei"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr "Fehler"
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr "Gültig"
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr "Kopien"
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr "Anzahl der zu druckenden Kopien für jedes Label"
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr "Verbunden"
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr "Unbekannt"
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr "Drucken"
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr "Keine Medien"
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr "Verbindung getrennt"
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr "Etikettendrucker"
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr "Drucken Sie Etiketten direkt für verschiedene Artikel."
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr "Druckerstandort"
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr "Den Drucker an einen bestimmten Ort aufstellen"
 
@@ -4117,7 +4160,7 @@ msgstr "Konfigurationstyp"
 msgid "Order Reference"
 msgstr "Bestellreferenz"
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr "Ausstehend"
 
@@ -4125,7 +4168,7 @@ msgstr "Ausstehend"
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr "Erstellt von"
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr "Hat Preise"
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr "Bestellung"
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr "Bestellung abgeschlossen"
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr "Internes Teil"
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr "Bestellung ausstehend"
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "Fertig"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr "Bestellung"
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr "Bestellung"
 msgid "Sales Order"
 msgstr "Auftrag"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr "Rücksendeauftrag"
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "Gesamtpreis"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr "Gesamtpreis für diese Bestellung"
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr "Auftragswährung"
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr "Währung für diesen Auftrag (leer lassen, um Firmenstandard zu verwenden)"
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr "Kontakt stimmt nicht mit der ausgewählten Firma überein"
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr "Auftragsbeschreibung (optional)"
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr "Projektcode für diesen Auftrag auswählen"
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr "Link auf externe Seite"
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "Zieldatum"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr "Geplantes Lieferdatum für Auftrag."
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr "Nutzer oder Gruppe der/die für diesen Auftrag zuständig ist/sind"
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr "Ansprechpartner für diesen Auftrag"
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr "Firmenadresse für diesen Auftrag"
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr "Bestell-Referenz"
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr "Bestellungs-Status"
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr "Firma bei der die Teile bestellt werden"
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr "Zulieferer-Referenz"
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr "Zulieferer Bestellreferenz"
-
-#: order/models.py:584
-msgid "received by"
-msgstr "Empfangen von"
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr "Aufgabedatum"
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr "Datum an dem die Bestellung aufgegeben wurde"
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr "Nutzer oder Gruppe der/die für diesen Auftrag zuständig ist/sind"
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr "Ansprechpartner für diesen Auftrag"
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr "Firmenadresse für diesen Auftrag"
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr "Bestell-Referenz"
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr "Bestellungs-Status"
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr "Firma bei der die Teile bestellt werden"
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr "Zulieferer-Referenz"
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr "Zulieferer Bestellreferenz"
+
+#: order/models.py:546
+msgid "received by"
+msgstr "Empfangen von"
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr "Datum an dem der Auftrag fertigstellt wurde"
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "Ziel-Lager"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr "Teile-Zulieferer muss dem Zulieferer der Bestellung entsprechen"
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr "Anzahl muss eine positive Zahl sein"
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "Kunde"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr "Firma an die die Teile verkauft werden"
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr "Kundenreferenz"
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr "Bestellreferenz"
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr "Versanddatum"
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr "Versand von"
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr "Bestellung ist bereits abgeschlossen"
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr "Bestellung ist bereits storniert"
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr "Nur ein offener Auftrag kann als abgeschlossen markiert werden"
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr "Auftrag kann nicht abgeschlossen werden, da unvollständige Sendungen vorhanden sind"
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr "Auftrag kann nicht abgeschlossen werden, da es unvollständige Positionen gibt"
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr "Anzahl"
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr "Position - Referenz"
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr "Position - Notizen"
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr "Zieldatum für diesen Einzelposten (leer lassen, um das Zieldatum des Auftrags zu verwenden)"
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr "Positionsbeschreibung (optional)"
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr "Zusätzlicher Kontext für diese Zeile"
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr "Stückpreis"
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr "Lieferantenteil muss mit Lieferant übereinstimmen"
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr "Zuliefererteil"
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr "Empfangen"
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr "Empfangene Objekt-Anzahl"
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr "Preis"
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr "Preis pro Einheit"
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr "Ein virtuelles Teil kann nicht einem Auftrag zugeordnet werden"
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr "Nur verkaufbare Teile können einem Auftrag zugewiesen werden"
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "Verkaufspreis"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr "Stückverkaufspreis"
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Versendet"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr "Versendete Menge"
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr "Versanddatum"
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr "Lieferdatum"
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr "Versanddatum"
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr "Kontrolliert von"
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr "Benutzer, der diese Sendung kontrolliert hat"
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr "Sendung"
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr "Sendungsnummer"
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr "Sendungsverfolgungsnummer"
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr "Informationen zur Sendungsverfolgung"
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr "Rechnungsnummer"
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr "Referenznummer für zugehörige Rechnung"
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr "Sendung wurde bereits versandt"
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr "Sendung hat keine zugewiesene Lagerartikel"
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr "Lagerartikel wurde nicht zugewiesen"
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr "Kann Lagerartikel keiner Zeile mit einem anderen Teil hinzufügen"
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr "Kann Lagerartikel keiner Zeile ohne Teil hinzufügen"
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr "Die zugeordnete Anzahl darf nicht die verfügbare Anzahl überschreiten"
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr "Anzahl für serialisierte Lagerartikel muss 1 sein"
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr "Auftrag gehört nicht zu Sendung"
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr "Sendung gehört nicht zu Auftrag"
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr "Position"
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr "Sendungsnummer-Referenz"
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr "Position"
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr "Lagerartikel für Zuordnung auswählen"
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr "Anzahl für Bestandszuordnung eingeben"
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr "Rücksendungsreferenz"
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr "Firma von der die Artikel zurückgeschickt werden"
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr "Status der Rücksendung"
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr "Artikel zur Rücksendung auswählen"
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr "Empfangsdatum"
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr "Das Datum des Empfangs dieses Rücksendeartikels"
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr "Ergebnis"
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr "Ergebnis für dieses Zeilenelement"
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr "Kosten für die Rückgabe oder Reparatur dieses Objektes"
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr "Elemente zusammenfügen"
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr "Zusammenführen von Elementen mit dem gleichen Teil, Ziel- und Zieldatum zu einem Zeilenelement"
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr "Lieferanten-Teilenummer"
 
@@ -4787,7 +4830,7 @@ msgstr "Position"
 msgid "Line item does not match purchase order"
 msgstr "Position stimmt nicht mit Kaufauftrag überein"
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr "Zielort für empfangene Teile auswählen"
 
@@ -4811,7 +4854,7 @@ msgstr "Seriennummern für eingehende Lagerartikel"
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr "Barcode ist bereits in Verwendung"
 msgid "An integer quantity must be provided for trackable parts"
 msgstr "Ganzzahl für verfolgbare Teile erforderlich"
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr "Positionen müssen angegeben werden"
 
@@ -4891,32 +4934,32 @@ msgstr "Folgende Serienummern konnten nicht gefunden werden"
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr "Artikel der Bestellzeile zurücksenden"
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr "Lagerartikel Status-Code"
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr "Artikel entspricht nicht der Rücksendeschrift"
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr "Artikel wurde bereits erhalten"
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr "Artikel können nur bei laufenden Bestellungen empfangen werden"
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr "Verkaufspreis-Währung"
 
@@ -4970,107 +5013,103 @@ msgstr "Überfälliger Auftrag"
 msgid "Sales order {so} is now overdue"
 msgstr "Auftrag {so} ist jetzt überfällig"
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr "Markiert"
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr "Nach markierten Kategorien filtern"
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr "Ebenen"
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr "Filter nach Kategorietiefe"
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr "Oberste Ebene"
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr "Mehrstufig"
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr "Unterkategorien in gefilterte Ergebnisse einbeziehen"
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr "Übergeordnetes"
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr "Nach übergeordneter Kategorie filtern"
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr "Baum ausschließen"
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr "Unterkategorien in der angegebenen Kategorie ausschließen"
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr "Ergebnisse"
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr "Eingehende Bestellung"
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr "Ausgehender Auftrag"
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr "Lagerartikel produziert von Bauauftrag"
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr "Lagerartikel für Bauauftrag benötigt"
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr "Gesamte Stückliste validieren"
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr "Diese Option muss ausgewählt werden"
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr "Verwendet"
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr "Sie können diese Teilekategorie nicht als strukturell festlegen, da ihr bereits Teile zugewiesen sind!"
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "Teile"
 
@@ -5235,7 +5274,7 @@ msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern"
 msgid "Part category"
 msgstr "Teile-Kategorie"
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr "IPN (Interne Produktnummer)"
@@ -5244,7 +5283,7 @@ msgstr "IPN (Interne Produktnummer)"
 msgid "Part revision or version number"
 msgstr "Revisions- oder Versionsnummer"
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr "Version"
 
@@ -5276,7 +5315,7 @@ msgstr "Standard Ablaufzeit"
 msgid "Expiry time (in days) for stock items of this part"
 msgstr "Ablauf-Zeit (in Tagen) für Bestand dieses Teils"
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr "Minimaler Bestand"
 
@@ -5613,7 +5652,7 @@ msgstr "Test-Beschreibung"
 msgid "Enter description for this test"
 msgstr "Beschreibung für diesen Test eingeben"
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "Aktiviert"
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr "Anzahl der Teile, die diese Vorlage verwenden"
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr "Keine Teile ausgewählt"
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr "Kategorie auswählen"
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr "Originalteil"
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr "Originalteil zum Duplizieren auswählen"
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr "Bild kopieren"
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr "Bild vom Originalteil kopieren"
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr "Stückliste kopieren"
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr "Stückliste vom Originalteil kopieren"
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr "Parameter kopieren"
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr "Parameterdaten vom Originalteil kopieren"
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr "Anmerkungen kopieren"
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr "Notizen aus Originalteil kopieren"
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr "Start-Bestandsmenge"
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr "Initiale Lagermenge für dieses Teil. Wenn die Menge null ist, wird kein Lagerbestand hinzugefügt."
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr "Initialer Lagerort"
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr "Lagerstandort für dieses Teil angeben"
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr "Lieferant auswählen (oder leer lassen, um zu überspringen)"
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr "Hersteller auswählen (oder leer lassen, um zu überspringen)"
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr "Hersteller-Teilenummer"
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr "Ausgewählte Firma ist kein gültiger Lieferant"
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr "Ausgewählte Firma ist kein gültiger Hersteller"
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr "Herstellerteil mit dieser MPN existiert bereits"
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr "Lieferantenteil mit dieser SKU existiert bereits"
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr "Kategoriename"
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr "Im Bau"
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr "Lagerartikel"
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "Zulieferer"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr "Gesamtbestand"
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr "Nicht zugewiesenes Lager"
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr "Alternatives Lager"
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr "Teil duplizieren"
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr "Initiale Daten von anderem Teil kopieren"
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr "Initialer Lagerbestand"
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr "Erstelle Teil mit Ausgangsbestand"
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr "Lieferanteninformationen"
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr "Lieferanteninformationen zu diesem Teil hinzufügen"
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr "Kategorieparameter kopieren"
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr "Parametervorlagen aus der ausgewählten Teilkategorie kopieren"
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr "Vorhandenes Bild"
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr "Dateiname eines vorhandenen Teilbildes"
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr "Bilddatei existiert nicht"
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr "Inventurbericht auf ein bestimmtes Teil und alle Variantenteile beschränken"
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr "Inventurbericht auf eine bestimmte Teilekategorie und alle untergeordneten Kategorien beschränken"
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr "Inventurbericht auf einen bestimmten Lagerort und alle untergeordneten Lagerorte beschränken"
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr "Externen Bestand ausschließen"
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr "Lagerartikel an externen Orten ausschließen"
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr "Bericht generieren"
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr "Erstelle Berichtsdatei mit berechneten Inventurdaten"
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr "Teile aktualisieren"
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr "Angegebene Teile mit berechneten Inventurdaten aktualisieren"
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr "Inventur-Funktionalität ist nicht aktiviert"
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Hintergrund-Prozess-Kontrolle fehlgeschlagen"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr "Niedrigster Preis"
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr "Berechneten Wert für Mindestpreis überschreiben"
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr "Mindestpreis Währung"
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr "Höchster Preis"
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr "Berechneten Wert für maximalen Preis überschreiben"
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr "Maximalpreis Währung"
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr "Aktualisieren"
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr "Preis für dieses Teil aktualisieren"
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr "Konnte nicht von den angegebenen Währungen in {default_currency} umrechnen"
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr "Mindestpreis darf nicht größer als der Maximalpreis sein"
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr "Der Maximalpreis darf nicht kleiner als der Mindestpreis sein"
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr "Herstellbar"
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr "Teil auswählen, von dem Stückliste kopiert wird"
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr "Bestehende Daten entfernen"
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr "Bestehende Stücklisten-Positionen vor dem Kopieren entfernen"
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr "Vererbtes einschließen"
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr "Stücklisten-Positionen einbeziehen, die von Vorlage-Teilen geerbt werden"
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr "Ungültige Zeilen überspringen"
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr "Aktiviere diese Option, um ungültige Zeilen zu überspringen"
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr "Ersatzteile kopieren"
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr "Ersatzteile beim Duplizieren von Stücklisten-Positionen kopieren"
 
@@ -6336,28 +6367,28 @@ msgstr "Lagerartikel der Bestellung zugeordnet"
 msgid "Not enough information"
 msgstr "Nicht genügend Informationen"
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr "Weitere Informationen zum Empfang des Zeilenelements erforderlich"
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr "Erhaltene Bestellartikel"
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr "Zugewiesene Menge"
 msgid "Label printing failed"
 msgstr "Labeldruck fehlgeschlagen"
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr "Fehler beim Rendern des Etikett als PDF"
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr "Fehler beim Rendern des Etikett als HTML"
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr "Keine Elemente zum Drucken übergeben"
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr "Bietet native Unterstützung für Barcodes"
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr "InvenTree Benachrichtigungen"
@@ -6574,21 +6713,21 @@ msgstr "InvenTree Währungsumstellung"
 msgid "Default currency exchange integration"
 msgstr "Standard-Wechselkursintegration"
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr "InvenTree PDF-Etikettendrucker"
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr "Bietet native Unterstützung für das Drucken von PDF-Etiketten"
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr "Debug-Modus"
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr "Debug-Modus aktivieren - gibt Roh-HTML statt PDF zurück"
 
@@ -6608,47 +6747,47 @@ msgstr "Zuletzt benutzt"
 msgid "Options"
 msgstr "Optionen"
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr "Seitengröße für das Etikett"
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr "Etiketten überspringen"
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr "Diese Anzahl der Etiketten beim Drucken von Etiketten überspringen"
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr "Rand"
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr "Einen Rahmen um jedes Label drucken"
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr "Querformat"
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr "Labelblatt im Querformat drucken"
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr "InvenTree Etikettendrucker"
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr "Anordnen mehrerer Etiketten auf einem einzigen Blatt"
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr "Label ist zu groß für Seitengröße"
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr "Es wurden keine Etiketten generiert"
 
@@ -6793,7 +6932,7 @@ msgstr "Integriertes Plugin"
 msgid "Package Plugin"
 msgstr "Paket-Plugin"
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr "Plugin"
 
@@ -6801,21 +6940,21 @@ msgstr "Plugin"
 msgid "Method"
 msgstr "Methode"
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr "Kein Autor gefunden"
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr "Plugin '{p}' ist nicht kompatibel mit der aktuellen InvenTree Version {v}"
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr "Plugin benötigt mindestens Version {v}"
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr "Plugin benötigt maximal Version {v}"
@@ -7012,28 +7151,27 @@ msgstr "Konfiguration löschen"
 msgid "Delete the plugin configuration from the database"
 msgstr "Plugin-Konfiguration aus der Datenbank löschen"
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr "Teile"
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr "Plugin nicht gefunden"
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr "Plugin ist nicht aktiv"
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr "US-Legal"
 msgid "Letter"
 msgstr "US-Letter"
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr "Vorlagen Name"
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr "Dateinamen-Muster"
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "Filter"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr "Seitengröße für PDF-Berichte"
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr "Bericht in Querformat anzeigen"
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "Breite [mm]"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr "Label-Breite in mm"
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "Höhe [mm]"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr "Label-Höhe in mm"
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr "Fortschritt"
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr "Ausgabedatei"
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr "Schnipsel"
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr "Berichts-Snippet"
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr "Snippet-Beschreibung"
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr "Ressource"
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr "Berichts-Ressource"
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr "Ressource-Beschreibung"
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr "Etiketten-Vorlage auswählen"
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr "Übergeordneter Ort"
 msgid "Filter by parent location"
 msgstr "Filtern nach übergeordnetem Ort"
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr "Statuscode"
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr "Externer Standort"
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr "Teile-Baum"
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr "Gültigkeitsdauer vor"
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr "Gültigkeitsdauer nach"
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr "überfällig"
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr "Menge ist erforderlich"
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr "Gültiges Teil muss angegeben werden"
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr "Der angegebene Lieferantenartikel existiert nicht"
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr "Das Zulieferteil hat eine Packungsgröße definiert, aber das Kennzeichen use_pack_size ist nicht gesetzt"
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr "Seriennummern können für nicht verfolgbare Teile nicht angegeben werden"
 
@@ -7502,7 +7604,7 @@ msgstr "Besitzer auswählen"
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr "Lagerartikel können nicht direkt an einen strukturellen Lagerort verlegt werden, können aber an einen untergeordneten Lagerort verlegt werden."
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr "Extern"
 
@@ -8356,199 +8458,199 @@ msgstr "Aufträge"
 msgid "Return Orders"
 msgstr "Rücksendeaufträge"
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr "Berechtigung geändert"
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "Gruppe"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "Ansicht"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "Berechtigung Einträge anzuzeigen"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr "Hinzufügen"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "Berechtigung Einträge zu erstellen"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "Ändern"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "Berechtigungen Einträge zu ändern"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "Löschen"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "Berechtigung Einträge zu löschen"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Benutzername"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Vorname"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "Vorname des Benutzers"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Nachname"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "Nachname des Benutzers"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "E-Mailadresse des Benutzers"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "Mitarbeiter"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr "Hat der Benutzer die Mitarbeiter Berechtigung"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr "Administrator"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr "Ist dieser Benutzer ein Administrator"
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "Ist dieses Benutzerkonto aktiv"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "Sie haben keine Berechtigung, diese Benutzerrolle zu ändern."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Nur Superuser können neue Benutzer erstellen"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "Ihr Konto wurde erstellt."
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "Bitte benutzen Sie die Passwort-zurücksetzen-Funktion, um sich anzumelden"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "Willkommen bei InvenTree"
 
diff --git a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po
index e46fb1b9f0..0dbb578106 100644
--- a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Greek\n"
 "Language: el_GR\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "Το API endpoint δε βρέθηκε"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Δεν έχετε δικαιώματα να το δείτε αυτό"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "Δεν ήταν δυνατή η μετατροπή από {original} σε {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Μη έγκυρη ποσότητα"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "Η τιμή '{name}' δεν εμφανίζεται σε μορφή μο
 msgid "Provided value does not match required pattern: "
 msgstr "Η παρεχόμενη τιμή δεν ταιριάζει με το απαιτούμενο απαραραίητη μοτίβο: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Κενό σειριακό αριθμό συμβολοσειράς"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Διπλότυπο serial number"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "Το εύρος της ομάδας {group} υπερβαίνει την επιτρεπόμενη ποσότητα ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Δεν βρέθηκαν σειριακοί αριθμοί"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Ο αριθμός μοναδικών σειριακών αριθμών ({len(serials)}) πρέπει να αντιστοιχεί στην ποσότητα ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Αφαιρέστε τα HTML tags από την τιμή που εισάγατε"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr "Κινέζικα (Παραδοσιακά)"
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr ""
 
@@ -391,19 +403,19 @@ msgstr "Διπλότυπα ονόματα δεν μπορούν να υπάρχ
 msgid "Invalid choice"
 msgstr "Μη έγκυρη επιλογή"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Όνομα"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Περιγραφή"
 msgid "Description (optional)"
 msgstr "Περιγραφή (προαιρετική)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Μονοπάτι"
 
@@ -510,28 +522,28 @@ msgstr "Η μέση τιμή δεν πρέπει να υπερβαίνει το
 msgid "Invalid value for overage"
 msgstr "Μη έγκυρη τιμή για υπέρβαση"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Γονική Κατασκευή"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr "Εξάρτημα"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "Η έκδοση πρέπει να ακυρωθεί πριν διαγραφεί"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "Αναλώσιμο"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Προαιρετικό"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Υπό παρακολούθηση"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Κατανεμημένο"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Διαθέσιμο"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Σειρά Κατασκευής"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Δημιουργία Παραγγελιών"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Μη έγκυρη επιλογή για γονική κατασκευή"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "Εξάρτημα από εντολή κατασκευής δεν μπορεί να αλλάξει"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Αναφορά Παραγγελίας Κατασκευής"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Αναφορά Παραγγελίας Κατασκευής"
 msgid "Reference"
 msgstr "Αναφορά"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "Σύντομη περιγραφή της κατασκευής (προαιρετικό)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "BuildOrder στην οποία έχει δοθεί αυτή η κατασκευή"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Επιλέξτε τμήμα για κατασκευή"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Κωδικός Παραγγελίας Πωλήσεων"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "SalesOrder στην οποία έχει διατεθεί αυτό το build"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Τοποθεσία Προέλευσης"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Επιλέξτε τοποθεσία από την οποία θα γίνει απόθεμα, για αυτή την κατασκευή (αφήστε κενό για να πάρετε από οποιαδήποτε θέση αποθήκευσης)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Τοποθεσία Προορισμού"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Επιλέξτε την τοποθεσία όπου θα αποθηκευτούν τα ολοκληρωμένα στοιχεία"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Ποσότητα Κατασκευής"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Αριθμός αντικειμένων για κατασκευή"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Ολοκληρωμένα αντικείμενα"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Αριθμός αντικειμένων αποθέματος που έχουν ολοκληρωθεί"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Κατάσταση Κατασκευής"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Κωδικός κατάστασης κατασκευής"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Κωδικός Παρτίδας"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Κωδικός παρτίδας για αυτήν την κατασκευή"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Ημερομηνία Δημιουργίας"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Ημερομηνία ολοκλήρωσης στόχου"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Ημερομηνία ολοκλήρωσης της κατασκευής. Η κατασκευή θα καθυστερήσει μετά από αυτή την ημερομηνία."
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Ημερομηνία ολοκλήρωσης"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "ολοκληρώθηκε από"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Εκδόθηκε από"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "Χρήστης που εξέδωσε αυτήν την παραγγελία κατασκευής"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Υπεύθυνος"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "Χρήστης ή ομάδα υπεύθυνη για αυτή την εντολή κατασκευής"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Εξωτερικοί σύνδεσμοι"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Σύνδεσμος προς εξωτερική διεύθυνση URL"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "Προτεραιότητα Κατασκευής"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "Προτεραιότητα αυτής της εντολής κατασκευής"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "Κωδικός Έργου"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "Κωδικός έργου για αυτήν την εντολή κατασκευής"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "Η παραγγελία κατασκευής {build} έχει ολοκληρωθεί"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "Δεν καθορίστηκε έξοδος κατασκευής"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "Η ποσότητα δεν μπορεί να είναι μεγαλύτερη από την παραγόμενη ποσότητα"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "Το προϊόν κατασκευής {serial} δεν έχει περάσει όλες τις απαιτούμενες δοκιμές"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "Αντικείμενο κατασκευής"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "Αντικείμενο κατασκευής"
 msgid "Quantity"
 msgstr "Ποσότητα"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "Απαιτούμενη ποσότητα για την εντολή κατασκευής"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "Το στοιχείο κατασκευής πρέπει να ορίζει μια έξοδο κατασκευής, καθώς το κύριο τμήμα επισημαίνεται ως ανιχνεύσιμο"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "Η καταχωρημένη ποσότητα ({q}) δεν πρέπει να υπερβαίνει τη διαθέσιμη ποσότητα αποθέματος ({a})"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "Στοιχείο αποθέματος είναι υπερ-κατανεμημένο"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "Η ποσότητα πρέπει να είναι 1 για σειριακό απόθεμα"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "Το επιλεγμένο στοιχείο αποθέματος δεν ταιριάζει με τη γραμμή ΤΥ"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "Το επιλεγμένο στοιχείο αποθέματος δεν 
 msgid "Stock Item"
 msgstr "Στοιχείο Αποθέματος"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Στοιχείο πηγαίου αποθέματος"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Ποσότητα αποθέματος για διάθεση για κατασκευή"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Εγκατάσταση σε"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Αποθήκη προορισμού"
 
@@ -1034,10 +1057,10 @@ msgstr "Εισάγετε ποσότητα για την έξοδο κατασκ
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Τοποθεσία"
 
@@ -1053,7 +1076,7 @@ msgstr "Αυτόματη Κατανομή Σειριακών Αριθμών"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "Αυτόματη κατανομή των απαιτούμενων στοιχείων με τους αντίστοιχους σειριακούς αριθμούς"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "Οι παρακάτω σειριακοί αριθμοί υπάρχουν ήδη ή δεν είναι έγκυροι"
@@ -1082,10 +1105,10 @@ msgstr "Αιτία απόρριψης προϊόντων κατασκευής"
 msgid "Location for completed build outputs"
 msgstr "Τοποθεσία για ολοκληρωμένα προϊόντα κατασκευής"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Κατάσταση"
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr "Ακυρώθηκε"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Ολοκληρώθηκε"
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Χρήστης"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr ""
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Σύνδεσμος"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr ""
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Συνημμένο"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Το αρχείο λείπει"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Λείπει ο εξωτερικός σύνδεσμος"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Επιλέξτε αρχείο για επισύναψη"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Σχόλιο"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr ""
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr "Όνομα αρχείου"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr ""
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr ""
 
@@ -2415,7 +2438,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr ""
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr ""
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr ""
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr ""
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr ""
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr ""
 
@@ -3713,7 +3736,7 @@ msgstr ""
 msgid "Select supplier"
 msgstr ""
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr "Τοποθετήθηκε"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Αρχείο Δεδομένων"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr ""
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr "Εντολές Πώλησης"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "Επιθυμητή Προθεσμία"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "Προορισμός"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr ""
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Αποστάλθηκε"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr ""
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Ο έλεγχος εργασίας στο παρασκήνιο απέτυχε"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr ""
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "Δεν έχετε άδεια να αλλάξετε αυτόν τον ρόλο χρήστη."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Μόνο υπερχρήστες (superusers) μπορούν να δημιουργήσουν νέους χρήστες"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "Ο λογαριασμός σας δημιουργήθηκε."
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "Παρακαλούμε χρησιμοποιήστε τη λειτουργία επαναφοράς κωδικού πρόσβασης για να συνδεθείτε"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "Καλώς ήρθατε στο InvenTree"
 
diff --git a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po
index b3d3f7b192..1789e8ea9c 100644
--- a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 21:37+0000\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -26,19 +26,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr ""
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr ""
 
@@ -77,7 +89,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr ""
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr ""
 
@@ -94,7 +106,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -113,42 +125,42 @@ msgstr ""
 msgid "Provided value does not match required pattern: "
 msgstr ""
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr ""
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr ""
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr ""
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -340,7 +352,7 @@ msgstr ""
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr ""
 
@@ -392,19 +404,19 @@ msgstr ""
 msgid "Invalid choice"
 msgstr ""
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr ""
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -414,7 +426,7 @@ msgstr ""
 msgid "Description (optional)"
 msgstr ""
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr ""
 
@@ -511,28 +523,28 @@ msgstr ""
 msgid "Invalid value for overage"
 msgstr ""
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr ""
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -541,7 +553,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -550,9 +562,8 @@ msgstr ""
 msgid "Part"
 msgstr ""
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -613,90 +624,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr ""
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr ""
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr ""
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr ""
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr ""
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr ""
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr ""
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr ""
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -705,205 +728,205 @@ msgstr ""
 msgid "Reference"
 msgstr ""
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr ""
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr ""
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr ""
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr ""
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr ""
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr ""
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr ""
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr ""
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr ""
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr ""
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr ""
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr ""
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr ""
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr ""
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr ""
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr ""
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr ""
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr ""
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr ""
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr ""
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr ""
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr ""
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr ""
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr ""
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr ""
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr ""
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr ""
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr ""
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -919,36 +942,36 @@ msgstr ""
 msgid "Quantity"
 msgstr ""
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr ""
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -956,19 +979,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr ""
 
@@ -1035,10 +1058,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr ""
 
@@ -1054,7 +1077,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr ""
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1083,10 +1106,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr ""
 
@@ -1271,8 +1294,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1302,7 +1325,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1311,19 +1334,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1357,7 +1380,7 @@ msgstr ""
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr ""
 
@@ -1406,536 +1429,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr ""
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr ""
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr ""
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr ""
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr ""
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr ""
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr ""
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr ""
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr ""
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr ""
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1957,7 +1980,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2037,7 +2060,7 @@ msgstr ""
 msgid "Filename"
 msgstr ""
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2385,8 +2408,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr ""
@@ -2399,8 +2422,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr ""
 
@@ -2416,7 +2439,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2620,8 +2643,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr ""
 
@@ -3453,12 +3476,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr ""
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr ""
 
@@ -3498,8 +3521,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr ""
 
@@ -3543,7 +3566,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr ""
 
@@ -3654,7 +3677,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3703,10 +3726,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr ""
 
@@ -3714,7 +3737,7 @@ msgstr ""
 msgid "Select supplier"
 msgstr ""
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3734,7 +3757,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3806,10 +3829,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3842,10 +3889,6 @@ msgstr ""
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr ""
@@ -3926,7 +3969,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4014,51 +4057,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4118,7 +4161,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4126,7 +4169,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4162,53 +4205,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr ""
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4216,452 +4259,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr ""
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr ""
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4708,7 +4751,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4752,7 +4795,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4788,7 +4831,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4812,7 +4855,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4832,7 +4875,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4892,32 +4935,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4971,107 +5014,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5121,7 +5160,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr ""
 
@@ -5236,7 +5275,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5245,7 +5284,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5277,7 +5316,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5614,7 +5653,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5898,309 +5937,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr ""
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6337,28 +6368,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6438,15 +6469,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6495,11 +6526,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6529,6 +6562,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6575,21 +6714,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6609,47 +6748,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6794,7 +6933,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6802,21 +6941,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7013,28 +7152,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7054,172 +7192,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7371,103 +7473,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7503,7 +7605,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8357,198 +8459,198 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr ""
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr ""
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr ""
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr ""
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr ""
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr ""
diff --git a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po
index b551e4ed93..50bd70ac5e 100644
--- a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Spanish\n"
 "Language: es_ES\n"
@@ -25,19 +25,31 @@ msgstr "Debe habilitar la autenticación de doble factor antes de continuar."
 msgid "API endpoint not found"
 msgstr "endpoint API no encontrado"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr "Lista de artículos no válida"
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr "Filtros proporcionados inválidos"
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
-msgstr "No se encontraron elementos para eliminar"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
+msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "El usuario no tiene permiso para ver este modelo"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "No se pudo convertir {original} a {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Cantidad proporcionada no válida"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr "Número decimal no válido"
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "El valor '{name}' no aparece en formato de patrón"
 msgid "Provided value does not match required pattern: "
 msgstr "El valor proporcionado no coincide con el patrón requerido: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr "No se puede serializar más de 1000 elementos a la vez"
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "No se ha proporcionado un número de serie"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Serie duplicada"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr "Grupo no válido {group}"
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "Rango del grupo {group} supera la cantidad permitida ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Numeros de serie no encontrados"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Los números de serie únicos ({len(serials)}) debe coincidir con la cantidad ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Eliminar etiquetas HTML de este valor"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr "Los datos contienen contenido de marcado prohibido"
 
@@ -339,7 +351,7 @@ msgstr "Chino (Tradicional)"
 msgid "Log in to the app"
 msgstr "Iniciar sesión en la aplicación"
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "Correo electrónico"
 
@@ -391,19 +403,19 @@ msgstr "Los nombres duplicados no pueden existir bajo el mismo padre"
 msgid "Invalid choice"
 msgstr "Selección no válida"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Nombre"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Descripción"
 msgid "Description (optional)"
 msgstr "Descripción (opcional)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Ruta"
 
@@ -510,28 +522,28 @@ msgstr "El excedente no debe superar el 100%"
 msgid "Invalid value for overage"
 msgstr "Valor no válido para sobrecarga"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "Estado del pedido"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Construcción o Armado Superior"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr "Parte"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "Categoría"
 
@@ -612,90 +623,102 @@ msgstr "Completado antes"
 msgid "Completed after"
 msgstr "Completado después"
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "La compilación debe cancelarse antes de poder ser eliminada"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "Consumible"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Opcional"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "Montaje"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Rastreado"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr "Comprobable"
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr "Pedido pendiente"
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Asignadas"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Disponible"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Construir órden"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Construir órdenes"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr "BOM de ensamblado no ha sido validado"
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr "La orden de construcción no puede ser creado para una parte inactiva"
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr "La orden de construcción no puede ser creada para una parte desbloqueada"
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Opción no válida para la construcción padre"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "Se debe especificar un usuario o grupo responsable"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "La parte del pedido de construcción no puede ser modificada"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr "La fecha límite debe ser posterior a la fecha de inicio"
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Número de orden de construcción o armado"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Número de orden de construcción o armado"
 msgid "Reference"
 msgstr "Referencia"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "Breve descripción de la construcción (opcional)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "Orden de Construcción o Armado a la que se asigna"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Seleccionar parte a construir o armar"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Referencia de orden de venta"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Orden de Venta a la que se asigna"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Ubicación de la fuente"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Seleccione la ubicación de donde tomar stock para esta construcción o armado (deje en blanco para tomar desde cualquier ubicación)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Ubicación de destino"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Seleccione la ubicación donde se almacenarán los artículos completados"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Cantidad a crear"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Número de objetos existentes a construir"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Elementos completados"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Número de productos en stock que se han completado"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Estado de la construcción"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Código de estado de construcción"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Numero de lote"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Número de lote de este producto final"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Fecha de Creación"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr "Crear fecha de inicio"
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Fecha límite de finalización"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Fecha límite para la finalización de la construcción. La construcción estará vencida después de esta fecha."
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Fecha de finalización"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "terminado por"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Emitido por"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "El usuario que emitió esta orden"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Responsable"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "Usuario o grupo responsable de esta orden de construcción"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Link externo"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Enlace a URL externa"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "Prioridad de construcción"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "Prioridad de esta orden de construcción"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "Código del proyecto"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "Código de proyecto para esta orden de ensamble"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr "No se pudo descargar la tarea para completar las asignaciones de construcción"
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "El pedido {build} ha sido procesado"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "Pedido #[order] ha sido procesado"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr "Los números de serie deben ser proporcionados para las partes rastreables"
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "No se ha especificado salida de construcción"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "La construcción de la salida ya está completa"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "La salida de la construcción no coincide con el orden de construcción"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "La cantidad debe ser mayor que cero"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "La cantidad no puede ser mayor que la cantidad de salida"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "La construcción {serial} no ha pasado todas las pruebas requeridas"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr "Construir línea de pedido"
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "Ensamblar equipo"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "Ensamblar equipo"
 msgid "Quantity"
 msgstr "Cantidad"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "Cantidad requerida para orden de ensamble"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "Item de construcción o armado debe especificar un resultado o salida, ya que la parte maestra está marcada como rastreable"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "Cantidad asignada ({q}) no debe exceder la cantidad disponible de stock ({a})"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "Artículo de stock sobreasignado"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "Cantidad asignada debe ser mayor que cero"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "La cantidad debe ser 1 para el stock serializado"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "El artículo de almacén selelccionado no coincide con la línea BOM"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "El artículo de almacén selelccionado no coincide con la línea BOM"
 msgid "Stock Item"
 msgstr "Artículo de stock"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Producto original de stock"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Cantidad de stock a asignar para construir"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Instalar en"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Artículo de stock de destino"
 
@@ -1034,10 +1057,10 @@ msgstr "Introduzca los números de serie de salidas de construcción"
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Ubicación"
 
@@ -1053,7 +1076,7 @@ msgstr "Autoasignar Números de Serie"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "Asignar automáticamente los artículos requeridos con números de serie coincidentes"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "Los siguientes números seriales ya existen o son inválidos"
@@ -1082,10 +1105,10 @@ msgstr "Razón para descartar la salida de ensamble(s)"
 msgid "Location for completed build outputs"
 msgstr "Ubicación para las salidas de construcción completadas"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Estado"
 
@@ -1270,8 +1293,8 @@ msgstr "Nombre de parte la BOM"
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr "Parte del proveedor"
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr "Permitir variantes"
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "Item de Lista de Materiales"
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr "Stock Asignado"
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr "En pedido"
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr "En producción"
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr "Stock externo"
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "Stock Disponible"
 
@@ -1356,7 +1379,7 @@ msgstr "Cancelado"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Terminado"
 
@@ -1405,536 +1428,536 @@ msgstr "No se han proporcionado códigos de divisa válidos"
 msgid "No plugin"
 msgstr "Sin plugin"
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "Actualizado"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "Fecha y hora de la última actualización"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "Código único del proyecto"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "Descripción del proyecto"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr "Usuario o grupo responsable de este projecto"
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr "Tecla de ajustes"
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "Valor de ajuste"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr "El valor elegido no es una opción válida"
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr "El valor debe ser un valor booleano"
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr "El valor debe ser un entero"
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr "El valor debe ser un número válido"
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr "El valor no pasa las comprobaciones de validación"
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr "Cadena de clave debe ser única"
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Usuario"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr "Cantidad de salto de precio"
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "Precio"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr "Precio unitario a la cantidad especificada"
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr "Endpoint"
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr "Punto final en el que se recibe este webhook"
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr "Nombre para este webhook"
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Activo"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr "Está activo este webhook"
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr "Token"
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr "Token para el acceso"
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "Clave"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr "Secreto compartido para HMAC"
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr "ID de mensaje"
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr "Identificador único para este mensaje"
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr "Servidor desde el cual se recibió este mensaje"
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr "Encabezado"
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr "Encabezado del mensaje"
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr "Cuerpo"
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr "Cuerpo de este mensaje"
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr "Endpoint en el que se recibió este mensaje"
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr "Trabajado en"
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr "¿El trabajo en este mensaje ha terminado?"
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "Título"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Enlace"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "Publicado"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "Autor"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "Resumen"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr "Leer"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr "¿Esta noticia ya fue leída?"
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "Imágen"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "Archivo de imagen"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr "Unidad personalizada"
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr "El símbolo de la unidad debe ser único"
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr "Nombre de unidad debe ser un identificador válido"
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr "Nombre de unidad"
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr "Símbolo"
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr "Símbolo de unidad opcional"
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr "Definición"
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr "Definición de unidad"
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Archivo adjunto"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Archivo no encontrado"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Falta enlace externo"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Seleccionar archivo para adjuntar"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Comentario"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr "Comentario de archivo adjunto"
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr "Fecha de carga"
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr "Fecha de carga del archivo"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr "Tamaño del archivo"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr "Tamaño del archivo en bytes"
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr "Tipo de modelo no válido especificado para el archivo adjunto"
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr "Estado personalizado"
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr "Estados personalizados"
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr "Llave lógica"
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "Valor"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr "Nombre del estado"
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr "Etiqueta"
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr "Etiqueta que se mostrará en el frontend"
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr "Color"
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr "Color que se mostrará en el frontend"
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr "Modelo"
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr "El modelo debe ser seleccionado"
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr "La clave debe ser seleccionada"
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr "La clave lógica debe ser seleccionada"
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr "Lista de selección"
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr "Listas de Selección"
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr "Nombre de la lista de selección"
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr "Descripción de la lista de selección"
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr "Bloqueado"
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr "¿Está bloqueada esta lista de selección?"
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr "¿Se puede utilizar esta lista de selección?"
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr "Complemento de origen"
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr "Complemento que proporciona la lista de selección"
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr "Cadena de origen"
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr "Cadena opcional que identifica la fuente usada para esta lista"
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr "Entrada por defecto"
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr "Entrada predeterminada para esta lista de selección"
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "Creado"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr "Fecha y hora en la que se creó la lista de selección"
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr "Última actualización"
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr "Fecha y hora en que la lista de selección fue actualizada por última vez"
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr "Entrada de lista de selección"
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr "Entradas de la lista de selección"
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr "Lista de selección a la que pertenece esta entrada"
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr "Valor del elemento de la lista de selección"
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr "Etiqueta para la entrada de lista de selección"
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr "Descripción de la entrada de lista de selección"
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr "¿Está activa esta entrada de la lista de selección?"
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr "Escanear código de barras"
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr "Datos"
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr "Datos de código de barras"
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr "Usuario que escaneó el código de barras"
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr "Fecha y hora del escaneo de código de barras"
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr "Dispositivo URL que procesó el código de barras"
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr "Contexto"
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr "Datos de contexto para el escaneo de código de barras"
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr "Respuesta"
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr "Respuesta de datos del escaneo de código de barras"
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr "Resultado"
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr "¿El escaneo de código de barras fue exitoso?"
 
@@ -1956,7 +1979,7 @@ msgstr "{verbose_name} cancelado"
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr "Artículos Recibidos"
 
@@ -2036,7 +2059,7 @@ msgstr "Argumentos de palabra clave de tarea"
 msgid "Filename"
 msgstr "Nombre de Archivo"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr "Copiar plantillas de parámetros de categoría"
 msgid "Copy category parameter templates when creating a part"
 msgstr "Copiar plantillas de parámetros de categoría al crear una parte"
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "Plantilla"
@@ -2398,8 +2421,8 @@ msgstr "Las partes son plantillas por defecto"
 msgid "Parts can be assembled from other components by default"
 msgstr "Las partes pueden ser ensambladas desde otros componentes por defecto"
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "Componente"
 
@@ -2415,7 +2438,7 @@ msgstr "Comprable"
 msgid "Parts are purchaseable by default"
 msgstr "Las partes son comprables por defecto"
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr "Vendible"
 
@@ -2619,8 +2642,8 @@ msgstr "Registrar errores de reportes"
 msgid "Log errors which occur when generating reports"
 msgstr "Registrar errores ocurridos al generar reportes"
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Tamaño de página"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "Fabricante"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Empresa"
 
@@ -3497,8 +3520,8 @@ msgstr "Teléfono de contacto"
 msgid "Contact email address"
 msgstr "Correo electrónico de contacto"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "Contacto"
 
@@ -3542,7 +3565,7 @@ msgstr "¿Esta empresa fabrica partes?"
 msgid "Default currency used for this company"
 msgstr "Moneda predeterminada utilizada para esta empresa"
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "Dirección"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr "Seleccionar fabricante"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr "La parte vinculada del fabricante debe hacer referencia a la misma parte base"
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "Proveedor"
 
@@ -3713,7 +3736,7 @@ msgstr "Proveedor"
 msgid "Select supplier"
 msgstr "Seleccionar proveedor"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr "Unidad de mantenimiento de stock de proveedores"
 
@@ -3733,7 +3756,7 @@ msgstr "URL del enlace de parte del proveedor externo"
 msgid "Supplier part description"
 msgstr "Descripción de la parte del proveedor"
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr "Moneda predeterminada utilizada para este proveedor"
 msgid "Company Name"
 msgstr "Nombre de la empresa"
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr "En Stock"
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr "Clave personalizada de estado"
@@ -3841,10 +3888,6 @@ msgstr "Colocado"
 msgid "Invalid status code"
 msgstr "Código de estado no válido"
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr "Formato de exportación inválido"
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Archivo de datos"
@@ -3925,7 +3968,7 @@ msgstr "Datos de la fila original"
 msgid "Errors"
 msgstr "Errores"
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr "Válido"
 
@@ -4013,51 +4056,51 @@ msgstr "El archivo de datos tiene demasiadas filas"
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr "Copias"
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr "Número de copias a imprimir para cada etiqueta"
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr "Conectado"
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr "Desconocido"
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr "Impresión"
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr "Sin archivos multimedia"
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr "Atascamiento de papel"
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr "Desconectado"
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr "Impresora de Etiquetas"
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr "Imprime directamente etiquetas para varios artículos."
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr "Ubicación de la Impresora"
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr "Tipo de configuración"
 msgid "Order Reference"
 msgstr "Referencia del pedido"
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr "Destacado"
 
@@ -4125,7 +4168,7 @@ msgstr "Destacado"
 msgid "Has Project Code"
 msgstr "Tiene Código de Proyecto"
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr "Creado por"
 
@@ -4161,53 +4204,53 @@ msgstr "Fecha objetivo antes"
 msgid "Target Date After"
 msgstr "Fecha objetivo después"
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr "Tiene Precio"
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr "Completado antes de"
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr "Completado después de"
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr "Orden"
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr "Orden completada"
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr "Componente interno"
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr "Orden pendiente"
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "Completados"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr "Tiene envío"
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr "Orden de compra"
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr "Orden de compra"
 msgid "Sales Order"
 msgstr "Orden de Venta"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr "Orden de devolución"
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "Precio Total"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr "Precio total para este pedido"
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr "Moneda de pedido"
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr "Moneda para este pedido (dejar en blanco para utilizar el valor predeterminado de la empresa)"
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr "Este pedido está bloqueado y no puede ser modificado"
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr "El contacto no coincide con la empresa seleccionada"
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr "La fecha de inicio debe ser anterior a la fecha de límite"
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr "Descripción del pedido (opcional)"
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr "Seleccione el código del proyecto para este pedido"
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr "Enlace a Url externa"
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr "Fecha de inicio"
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr "Fecha de inicio programada para este pedido"
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "Fecha objetivo"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr "Fecha esperada para la entrega del pedido. El pedido se retrasará después de esta fecha."
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr "Usuario o grupo responsable de este pedido"
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr "Punto de contacto para este pedido"
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr "Dirección de la empresa para este pedido"
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr "Referencia del pedido"
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr "Estado de la orden de compra"
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr "Empresa de la cual se están encargando los artículos"
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr "Referencia del proveedor"
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr "Código de referencia de pedido del proveedor"
-
-#: order/models.py:584
-msgid "received by"
-msgstr "recibido por"
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr "Fecha de emisión"
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr "Fecha de expedición del pedido"
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr "Usuario o grupo responsable de este pedido"
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr "Punto de contacto para este pedido"
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr "Dirección de la empresa para este pedido"
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr "Referencia del pedido"
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr "Estado de la orden de compra"
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr "Empresa de la cual se están encargando los artículos"
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr "Referencia del proveedor"
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr "Código de referencia de pedido del proveedor"
+
+#: order/models.py:546
+msgid "received by"
+msgstr "recibido por"
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr "La fecha de pedido fue completada"
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "Destinación"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr "Destino para los artículos recibidos"
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr "El proveedor de la parte debe coincidir con el proveedor de PO"
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr "La cantidad debe ser un número positivo"
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "Cliente"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr "Empresa a la que se venden los artículos"
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr "Estado de la orden de venta"
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr "Referencia del cliente "
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr "Código de referencia de pedido del cliente"
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr "Fecha de envío"
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr "enviado por"
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr "La orden ya fue completada"
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr "La orden ya fue cancelada"
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr "Sólo una orden abierta puede ser marcada como completa"
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr "El pedido no se puede completar porque hay envíos incompletos"
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr "El pedido no se puede completar ya que hay asignaciones incompletas"
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr "El pedido no se puede completar porque hay partidas incompletas"
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr "Este pedido está bloqueado y no puede ser modificado"
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr "Cantidad del artículo"
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr "Referencia de partida"
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr "Notas de partida"
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr "Fecha objetivo para esta partida (dejar en blanco para usar la fecha de destino de la orden)"
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr "Descripción de partida (opcional)"
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr "Contexto adicional para esta línea"
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr "Precio unitario"
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr "La parte del proveedor debe coincidir con el proveedor"
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr "Parte del proveedor"
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr "Recibido"
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr "Número de artículos recibidos"
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr "Precio de Compra"
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr "Precio de compra unitario"
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr "Una parte virtual no puede ser asignada a un pedido de venta"
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr "Sólo las partes vendibles pueden ser asignadas a un pedido de venta"
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "Precio de Venta"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr "Precio de venta unitario"
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Enviado"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr "Cantidad enviada"
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr "Fecha del envío"
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr "Fecha de entrega"
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr "Fecha de entrega del envío"
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr "Revisado por"
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr "Usuario que revisó este envío"
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr "Envío"
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr "Número de envío"
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr "Número de Seguimiento"
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr "Información de seguimiento del envío"
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr "Número de factura"
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr "Número de referencia para la factura asociada"
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr "El envío ya ha sido enviado"
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr "El envío no tiene artículos de stock asignados"
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr "El artículo de stock no ha sido asignado"
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr "No se puede asignar el artículo de stock a una línea con una parte diferente"
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr "No se puede asignar stock a una línea sin una parte"
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr "La cantidad de asignación no puede exceder la cantidad de stock"
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr "La cantidad debe ser 1 para el stock serializado"
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr "La orden de venta no coincide con el envío"
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr "El envío no coincide con el pedido de venta"
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr "Línea"
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr "Referencia del envío del pedido de venta"
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr "Ítem"
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr "Seleccionar artículo de stock para asignar"
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr "Especificar la cantidad de asignación de stock"
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr "Referencia de la orden de devolución"
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr "Empresa de la cual se están devolviendo los artículos"
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr "Estado de la orden de devolución"
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr "Seleccionar el artículo a devolver del cliente"
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr "Fecha de recepción"
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr "La fecha en la que se recibió este artículo de devolución"
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr "Resultado"
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr "Salida para esta partida"
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr "Costo asociado con la devolución o reparación para esta partida"
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr "Duplicar pedido"
 msgid "Specify options for duplicating this order"
 msgstr "Especificar opciones para duplicar este pedido"
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr "ID de pedido no válido"
 
@@ -4751,7 +4794,7 @@ msgstr "Combinar artículos"
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr "SKU"
 
@@ -4787,7 +4830,7 @@ msgstr "Partida"
 msgid "Line item does not match purchase order"
 msgstr "La partida no coincide con la orden de compra"
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr "Seleccione la ubicación de destino para los artículos recibidos"
 
@@ -4811,7 +4854,7 @@ msgstr "Introduzca números de serie para artículos de almacén entrantes"
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr "Código de barras en uso"
 msgid "An integer quantity must be provided for trackable parts"
 msgstr "Debe proporcionarse una cantidad entera para las partes rastreables"
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr "Se deben proporcionar las partidas"
 
@@ -4891,32 +4934,32 @@ msgstr "No se han encontrado coincidencias para los siguientes números de serie
 msgid "The following serial numbers are unavailable"
 msgstr "Los siguientes números de serie no están disponibles"
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr "Partida de orden de devolución"
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr "La partida no coincide con la orden de devolución"
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr "La partida ya ha sido recibida"
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr "Los artículos sólo pueden ser recibidos contra pedidos en curso"
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr "Cantidad a devolver"
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr "Moneda de precio de línea"
 
@@ -4970,107 +5013,103 @@ msgstr "Orden de venta atrasada"
 msgid "Sales order {so} is now overdue"
 msgstr "La orden de venta {so} está atrasada"
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr "Favoritos"
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr "Profundidad"
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr "Filtrar por profundidad de categoría"
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr "Nivel superior"
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr "Filtrar por categorías de nivel superior"
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr "En cascada"
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr "Tiene resultados"
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr "Orden de compra entrante"
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr "Orden de venta saliente"
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr "Validación de Lista de Materiales"
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr "Esta opción debe ser seleccionada"
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr "¡No puedes hacer que esta categoría de partes sea estructural porque algunas partes ya están asignadas!"
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "Partes"
 
@@ -5235,7 +5274,7 @@ msgstr "Palabras clave para mejorar la visibilidad en los resultados de búsqued
 msgid "Part category"
 msgstr "Categoría de parte"
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr "IPN"
@@ -5244,7 +5283,7 @@ msgstr "IPN"
 msgid "Part revision or version number"
 msgstr "Revisión de parte o número de versión"
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr "Revisión"
 
@@ -5276,7 +5315,7 @@ msgstr "Expiración por defecto"
 msgid "Expiry time (in days) for stock items of this part"
 msgstr "Tiempo de expiración (en días) para los artículos de stock de esta parte"
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr "Stock mínimo"
 
@@ -5613,7 +5652,7 @@ msgstr "Descripción de prueba"
 msgid "Enter description for this test"
 msgstr "Introduce la descripción para esta prueba"
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "Habilitado"
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr "No hay partes seleccionadas"
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr "Seleccionar categoría"
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr "Parte original"
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr "Seleccione la parte original a duplicar"
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr "Copiar Imagen"
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr "Copiar imagen desde la parte original"
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr "Copiar BOM"
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr "Copiar la factura de materiales de la parte original"
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr "Copiar Parámetros"
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr "Copiar datos del parámetro de la parte original"
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr "Copiar Notas"
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr "Cantidad Inicial de Stock"
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr "Seleccione proveedor (o déjelo en blanco para saltar)"
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr "Seleccionar fabricante (o dejar en blanco para saltar)"
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr "Número de parte del fabricante"
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr "La empresa seleccionada no es un proveedor válido"
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr "La empresa seleccionada no es un fabricante válido"
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr "Nombre de categoría"
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr "En construcción"
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr "Elementos de stock"
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "Proveedores"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr "Inventario Total"
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr "Duplicar Parte"
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr "Stock Inicial"
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr "Crear Parte con cantidad inicial de stock"
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr "Información del proveedor"
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr "Añadir información inicial del proveedor para esta parte"
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr "Copiar Parámetros de Categoría"
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada"
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr "Imagen Existente"
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr "El archivo de imagen no existe"
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr "Generar informe"
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr "Actualizar partes"
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Falló la comprobación en segundo plano del worker"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr "Precio mínimo"
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr "Anular el valor calculado para precio mínimo"
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr "Precio mínimo de moneda"
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr "Precio máximo"
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr "Precio máximo de moneda"
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr "Actualizar"
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr "El precio mínimo no debe ser mayor que el precio máximo"
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr "El precio máximo no debe ser inferior al precio mínimo"
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr "Puede construir"
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr "Seleccionar parte de la que copiar BOM"
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr "Eliminar Datos Existentes"
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr "Eliminar artículos BOM existentes antes de copiar"
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr "Incluye Heredado"
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr "Incluye artículos BOM que son heredados de partes con plantillas"
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr "Omitir filas no válidas"
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr "Activar esta opción para omitir filas inválidas"
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr "Copiar partes sustitutas"
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr "Impresión de etiquetas fallida"
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr "Proporciona soporte nativo para códigos de barras"
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr "Notificaciones de InvenTree"
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr "Impresora de etiquetas PDF de InvenTree"
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr "Proporciona soporte nativo para imprimir etiquetas PDF"
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr "Modo de depuración"
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr "Activar modo de depuración - devuelve código HTML en lugar de PDF"
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr "Complemento integrado"
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr "Complemento"
 
@@ -6801,21 +6940,21 @@ msgstr "Complemento"
 msgid "Method"
 msgstr "Método"
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr "No se encontró autor"
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr "El complemento '{p}' no es compatible con la versión actual de InvenTree {v}"
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr "El complemento requiere al menos la versión {v}"
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr "El complemento requiere como máximo la versión {v}"
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr "Dimensiones de etiqueta inválidas"
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr "Legal"
 msgid "Letter"
 msgstr "Carta"
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr "Nombre de la plantilla"
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr "Adjuntar al modelo al imprimir"
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr "Guardar la salida del informe como un archivo adjunto contra la instancia del modelo enlazado al imprimir"
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr "Patrón de Nombre de archivo"
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "Filtros"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr "Tamaño de página para reportes PDF"
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "Ancho [mm]"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr "Ancho de la etiqueta, especificado en mm"
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "Altura [mm]"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr "Altura de la etiqueta, especificada en mm"
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr "Progreso"
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr "Fragmento"
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr "Archivo fragmento de informe"
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr "Descripción de archivo de fragmento"
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr "Activo"
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr "Reportar archivo de activos"
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr "Descripción del archivo de activos"
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr "Selecciona la plantilla de etiqueta"
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr "Complemento de impresión"
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr "Selecciona el complemento a usar para imprimir etiquetas"
 
@@ -7370,103 +7472,103 @@ msgstr "Ubicación principal"
 msgid "Filter by parent location"
 msgstr "Filtrar por ubicación principal"
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr "Nombre de pieza (insensible a mayúsculas y minúsculas)"
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr "El nombre de la pieza (insensible a mayúsculas y minúsculas)"
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr "Nombre de la pieza (expresión regular)"
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr "Pieza IPN (insensible a mayúsculas y minúsculas)"
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr "Pieza IPN (insensible a mayúsculas y minúsculas)"
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr "Pieza IPN (expresión regular)"
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr "Stock mínimo"
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr "Stock máximo"
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr "Código de estado"
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr "Ubicación externa"
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr "Instalado en otro artículo de existencias"
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr "Árbol de piezas"
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr "Actualizado antes"
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr "Actualizado después"
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr "Inventario antes"
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr "Inventario después"
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr "Desactualizado"
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr "Cantidad requerida"
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr "Debe suministrarse una parte válida"
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr "Seleccionar Propietario"
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr "Externo"
 
@@ -8356,199 +8458,199 @@ msgstr "Órdenes de venta"
 msgid "Return Orders"
 msgstr "Ordenes de devolución"
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr "Permiso establecido"
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "Grupo"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "Vista"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "Permiso para ver artículos"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr "Añadir"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "Permiso para añadir artículos"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "Cambiar"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "Permisos para editar artículos"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "Eliminar"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "Permiso para eliminar artículos"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Nombre de usuario"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Nombre"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "Nombre del usuario"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Apellido"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "Apellido del usuario"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "Dirección de correo del usuario"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "Personal"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr "Tiene este usuario permisos de personal"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr "Superusuario"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr "Es este usuario un superusuario"
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "Esta cuenta de usuario está activa"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "No tiene permiso para cambiar este rol de usuario."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Solo los superusuarios pueden crear nuevos usuarios"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "Su cuenta ha sido creada."
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "Por favor, utilice la función de restablecer la contraseña para iniciar sesión"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "Bienvenido a InvenTree"
 
diff --git a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po
index 362fd3e321..3aed3bfaf9 100644
--- a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Spanish, Mexico\n"
 "Language: es_MX\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "endpoint API no encontrado"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr "Lista de artículos inválida"
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr "Filtros proporcionados inválidos"
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
-msgstr "No se encontraron artículos para eliminar"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
+msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "El usuario no tiene permiso para ver este modelo"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "No se pudo convertir {original} a {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Cantidad proporcionada no válida"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr "Número decimal inválido"
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "El valor '{name}' no aparece en formato de patrón"
 msgid "Provided value does not match required pattern: "
 msgstr "El valor proporcionado no coincide con el patrón requerido: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr "No se puede serializar más de 1000 artículos a la vez"
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "No se ha proporcionado un número de serie"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Serie duplicada"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr "Grupo inválido: {group}"
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "Rango del grupo {group} supera la cantidad permitida ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Numeros de serie no encontrados"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Los números de serie únicos ({len(serials)}) debe coincidir con la cantidad ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Eliminar etiquetas HTML de este valor"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr "Los datos contienen contenido de markdown prohibido"
 
@@ -339,7 +351,7 @@ msgstr "Chino (Tradicional)"
 msgid "Log in to the app"
 msgstr "Iniciar sesión en la aplicación"
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "Correo electrónico"
 
@@ -391,19 +403,19 @@ msgstr "Los nombres duplicados no pueden existir bajo el mismo padre"
 msgid "Invalid choice"
 msgstr "Selección no válida"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Nombre"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Descripción"
 msgid "Description (optional)"
 msgstr "Descripción (opcional)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Ruta"
 
@@ -510,28 +522,28 @@ msgstr "El excedente no debe superar el 100%"
 msgid "Invalid value for overage"
 msgstr "Valor no válido para sobrecarga"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "Estado del pedido"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Construcción o Armado Superior"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr "Incluye Variantes"
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr "Incluye Variantes"
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr "Incluye Variantes"
 msgid "Part"
 msgstr "Parte"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "Categoría"
 
@@ -612,90 +623,102 @@ msgstr "Completado antes de"
 msgid "Completed after"
 msgstr "Completado después de"
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "La compilación debe cancelarse antes de poder ser eliminada"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "Consumible"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Opcional"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "Montaje"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Rastreado"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr "Comprobable"
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr "Pedido pendiente"
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Asignadas"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Disponible"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Construir órden"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Construir órdenes"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr "BOM de ensamblado no ha sido validado"
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr "La orden de construcción no puede ser creado para una parte inactiva"
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr "La orden de construcción no puede ser creada para una parte desbloqueada"
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Opción no válida para la construcción padre"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "Se debe especificar un usuario o grupo responsable"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "La parte del pedido de construcción no puede ser modificada"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Número de orden de construcción o armado"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Número de orden de construcción o armado"
 msgid "Reference"
 msgstr "Referencia"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "Breve descripción de la construcción (opcional)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "Orden de Construcción o Armado a la que se asigna"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Seleccionar parte a construir o armar"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Referencia de orden de venta"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Orden de Venta a la que se asigna"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Ubicación de la fuente"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Seleccione la ubicación de donde tomar stock para esta construcción o armado (deje en blanco para tomar desde cualquier ubicación)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Ubicación de destino"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Seleccione la ubicación donde se almacenarán los artículos completados"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Cantidad a crear"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Número de objetos existentes a construir"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Elementos completados"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Número de productos en stock que se han completado"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Estado de la construcción"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Código de estado de construcción"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Numero de lote"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Número de lote de este producto final"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Fecha de Creación"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Fecha límite de finalización"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Fecha límite para la finalización de la construcción. La construcción estará vencida después de esta fecha."
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Fecha de finalización"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "terminado por"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Emitido por"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "El usuario que emitió esta orden"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Responsable"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "Usuario o grupo responsable de esta orden de construcción"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Link externo"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Enlace a URL externa"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "Prioridad de construcción"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "Prioridad de esta orden de construcción"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "Código del proyecto"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "Código de proyecto para esta orden de ensamble"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr "No se pudo descargar la tarea para completar las asignaciones de construcción"
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "El pedido {build} ha sido procesado"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "Pedido #[order] ha sido procesado"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr "Los números de serie deben ser proporcionados para las partes rastreables"
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "No se ha especificado salida de construcción"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "La construcción de la salida ya está completa"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "La salida de la construcción no coincide con el orden de construcción"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "La cantidad debe ser mayor que cero"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "La cantidad no puede ser mayor que la cantidad de salida"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "La construcción {serial} no ha pasado todas las pruebas requeridas"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr "Construir línea de pedido"
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "Ensamblar equipo"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "Ensamblar equipo"
 msgid "Quantity"
 msgstr "Cantidad"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "Cantidad requerida para orden de ensamble"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "Item de construcción o armado debe especificar un resultado o salida, ya que la parte maestra está marcada como rastreable"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "Cantidad asignada ({q}) no debe exceder la cantidad disponible de stock ({a})"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "Artículo de stock sobreasignado"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "Cantidad asignada debe ser mayor que cero"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "La cantidad debe ser 1 para el stock serializado"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "El artículo de almacén selelccionado no coincide con la línea BOM"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "El artículo de almacén selelccionado no coincide con la línea BOM"
 msgid "Stock Item"
 msgstr "Artículo de stock"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Producto original de stock"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Cantidad de stock a asignar para construir"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Instalar en"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Artículo de stock de destino"
 
@@ -1034,10 +1057,10 @@ msgstr "Introduzca los números de serie de salidas de construcción"
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Ubicación"
 
@@ -1053,7 +1076,7 @@ msgstr "Autoasignar Números de Serie"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "Asignar automáticamente los artículos requeridos con números de serie coincidentes"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "Los siguientes números seriales ya existen o son inválidos"
@@ -1082,10 +1105,10 @@ msgstr "Razón para descartar la salida de ensamble(s)"
 msgid "Location for completed build outputs"
 msgstr "Ubicación para las salidas de construcción completadas"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Estado"
 
@@ -1270,8 +1293,8 @@ msgstr "Nombre de parte la BOM"
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr "Parte del proveedor"
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr "Permitir variantes"
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "Item de Lista de Materiales"
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr "Stock Asignado"
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr "En pedido"
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr "En producción"
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr "Stock externo"
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "Stock Disponible"
 
@@ -1356,7 +1379,7 @@ msgstr "Cancelado"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Terminado"
 
@@ -1405,536 +1428,536 @@ msgstr "No se han proporcionado códigos de divisa válidos"
 msgid "No plugin"
 msgstr "Sin plugin"
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "Actualizado"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "Fecha y hora de la última actualización"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "Código único del proyecto"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "Descripción del proyecto"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr "Usuario o grupo responsable de este projecto"
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr "Tecla de ajustes"
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "Valor de ajuste"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr "El valor elegido no es una opción válida"
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr "El valor debe ser un valor booleano"
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr "El valor debe ser un entero"
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr "El valor debe ser un número válido"
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr "El valor no pasa las comprobaciones de validación"
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr "Cadena de clave debe ser única"
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Usuario"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr "Cantidad de salto de precio"
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "Precio"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr "Precio unitario a la cantidad especificada"
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr "Endpoint"
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr "Punto final en el que se recibe este webhook"
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr "Nombre para este webhook"
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Activo"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr "Está activo este webhook"
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr "Token"
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr "Token para el acceso"
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "Clave"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr "Secreto compartido para HMAC"
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr "ID de mensaje"
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr "Identificador único para este mensaje"
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr "Servidor desde el cual se recibió este mensaje"
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr "Encabezado"
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr "Encabezado del mensaje"
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr "Cuerpo"
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr "Cuerpo de este mensaje"
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr "Endpoint en el que se recibió este mensaje"
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr "Trabajado en"
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr "¿El trabajo en este mensaje ha terminado?"
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "Título"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Enlace"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "Publicado"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "Autor"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "Resumen"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr "Leer"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr "¿Esta noticia ya fue leída?"
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "Imágen"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "Archivo de imagen"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr "Tipo de modelo destino para esta imagen"
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr "Unidad personalizada"
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr "El símbolo de la unidad debe ser único"
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr "Nombre de unidad debe ser un identificador válido"
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr "Nombre de unidad"
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr "Símbolo"
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr "Símbolo de unidad opcional"
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr "Definición"
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr "Definición de unidad"
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Archivo adjunto"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Archivo no encontrado"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Falta enlace externo"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Seleccionar archivo para adjuntar"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Comentario"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr "Comentario de archivo adjunto"
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr "Fecha de carga"
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr "Fecha de carga del archivo"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr "Tamaño del archivo"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr "Tamaño del archivo en bytes"
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr "Tipo de modelo no válido especificado para el archivo adjunto"
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr "Estado personalizado"
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr "Estados personalizados"
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr "Conjunto de estado de referencia"
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr "Conjunto de estado extendido con este estado personalizado"
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr "Llave lógica"
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr "Clave lógica del estado que es igual a este estado personalizado en la lógica de negocios"
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "Valor"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr "Valor numérico que se guardará en la base de datos de modelos"
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr "Nombre del estado"
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr "Etiqueta"
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr "Etiqueta que se mostrará en el frontend"
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr "Color"
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr "Color que se mostrará en el frontend"
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr "Modelo"
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr "Modelo con el que este estado está asociado"
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr "El modelo debe ser seleccionado"
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr "La clave debe ser seleccionada"
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr "La clave lógica debe ser seleccionada"
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr "La clave debe ser distinta de la clave lógica"
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr "Debe proporcionarse una clase de estado de referencia válida"
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr "La clave debe ser distinta de las claves lógicas del estado de referencia"
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr "Lista de selección"
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr "Listas de Selección"
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr "Nombre de la lista de selección"
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr "Descripción de la lista de selección"
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr "Bloqueado"
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr "¿Está bloqueada esta lista de selección?"
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr "¿Se puede utilizar esta lista de selección?"
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr "Complemento de origen"
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr "Complemento que proporciona la lista de selección"
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr "Cadena de origen"
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr "Cadena opcional que identifica la fuente usada para esta lista"
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr "Entrada por defecto"
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr "Entrada predeterminada para esta lista de selección"
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "Creado"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr "Fecha y hora en la que se creó la lista de selección"
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr "Última actualización"
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr "Fecha y hora en que la lista de selección fue actualizada por última vez"
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr "Entrada de lista de selección"
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr "Entradas de la lista de selección"
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr "Lista de selección a la que pertenece esta entrada"
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr "Valor del elemento de la lista de selección"
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr "Etiqueta para la entrada de lista de selección"
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr "Descripción de la entrada de lista de selección"
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr "¿Está activa esta entrada de la lista de selección?"
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr "Escanear código de barras"
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr "Datos"
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr "Datos de código de barras"
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr "Usuario que escaneó el código de barras"
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr "Fecha y hora del escaneo de código de barras"
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr "Dispositivo URL que procesó el código de barras"
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr "Contexto"
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr "Datos de contexto para el escaneo de código de barras"
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr "Respuesta"
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr "Respuesta de datos del escaneo de código de barras"
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr "Resultado"
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr "¿El escaneo de código de barras fue exitoso?"
 
@@ -1956,7 +1979,7 @@ msgstr "{verbose_name} cancelado"
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr "Artículos Recibidos"
 
@@ -2036,7 +2059,7 @@ msgstr "Argumentos de palabra clave de tarea"
 msgid "Filename"
 msgstr "Nombre de Archivo"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr "Copiar plantillas de parámetros de categoría"
 msgid "Copy category parameter templates when creating a part"
 msgstr "Copiar plantillas de parámetros de categoría al crear una parte"
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "Plantilla"
@@ -2398,8 +2421,8 @@ msgstr "Las partes son plantillas por defecto"
 msgid "Parts can be assembled from other components by default"
 msgstr "Las partes pueden ser ensambladas desde otros componentes por defecto"
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "Componente"
 
@@ -2415,7 +2438,7 @@ msgstr "Comprable"
 msgid "Parts are purchaseable by default"
 msgstr "Las partes son comprables por defecto"
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr "Vendible"
 
@@ -2619,8 +2642,8 @@ msgstr "Registrar errores de reportes"
 msgid "Log errors which occur when generating reports"
 msgstr "Registrar errores ocurridos al generar reportes"
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Tamaño de página"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "Fabricante"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Empresa"
 
@@ -3497,8 +3520,8 @@ msgstr "Teléfono de contacto"
 msgid "Contact email address"
 msgstr "Correo electrónico de contacto"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "Contacto"
 
@@ -3542,7 +3565,7 @@ msgstr "¿Esta empresa fabrica partes?"
 msgid "Default currency used for this company"
 msgstr "Moneda predeterminada utilizada para esta empresa"
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "Dirección"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr "Seleccionar fabricante"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr "La parte vinculada del fabricante debe hacer referencia a la misma parte base"
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "Proveedor"
 
@@ -3713,7 +3736,7 @@ msgstr "Proveedor"
 msgid "Select supplier"
 msgstr "Seleccionar proveedor"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr "Unidad de mantenimiento de stock de proveedores"
 
@@ -3733,7 +3756,7 @@ msgstr "URL del enlace de parte del proveedor externo"
 msgid "Supplier part description"
 msgstr "Descripción de la parte del proveedor"
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr "Moneda predeterminada utilizada para este proveedor"
 msgid "Company Name"
 msgstr "Nombre de la empresa"
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr "En Stock"
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr "Clave personalizada de estado"
@@ -3841,10 +3888,6 @@ msgstr "Colocado"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr "Formato de exportación inválido"
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Archivo de datos"
@@ -3925,7 +3968,7 @@ msgstr "Datos de la fila original"
 msgid "Errors"
 msgstr "Errores"
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr "Válido"
 
@@ -4013,51 +4056,51 @@ msgstr "El archivo de datos tiene demasiadas filas"
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr "Copias"
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr "Número de copias a imprimir para cada etiqueta"
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr "Conectado"
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr "Desconocido"
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr "Impresión"
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr "Sin archivos multimedia"
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr "Atascamiento de papel"
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr "Desconectado"
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr "Impresora de Etiquetas"
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr "Imprime directamente etiquetas para varios artículos."
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr "Ubicación de la Impresora"
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr "Referencia del pedido"
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr "Destacado"
 
@@ -4125,7 +4168,7 @@ msgstr "Destacado"
 msgid "Has Project Code"
 msgstr "Tiene Código de Proyecto"
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr "Creado por"
 
@@ -4161,53 +4204,53 @@ msgstr "Fecha objetivo antes de"
 msgid "Target Date After"
 msgstr "Fecha objetivo después de"
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr "Tiene Precio"
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr "Completado antes de"
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr "Completado después de"
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr "Orden"
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr "Orden completada"
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr "Componente interno"
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr "Orden pendiente"
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "Completados"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr "Tiene envío"
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr "Orden de compra"
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr "Orden de compra"
 msgid "Sales Order"
 msgstr "Orden de Venta"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr "Orden de devolución"
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "Precio Total"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr "Precio total para este pedido"
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr "Moneda de pedido"
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr "Moneda para este pedido (dejar en blanco para utilizar el valor predeterminado de la empresa)"
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr "El contacto no coincide con la empresa seleccionada"
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr "Descripción del pedido (opcional)"
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr "Seleccione el código del proyecto para este pedido"
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr "Enlace a Url externa"
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "Fecha objetivo"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr "Fecha esperada para la entrega del pedido. El pedido se retrasará después de esta fecha."
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr "Usuario o grupo responsable de este pedido"
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr "Punto de contacto para este pedido"
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr "Dirección de la empresa para este pedido"
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr "Referencia del pedido"
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr "Estado de la orden de compra"
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr "Empresa de la cual se están encargando los artículos"
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr "Referencia del proveedor"
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr "Código de referencia de pedido del proveedor"
-
-#: order/models.py:584
-msgid "received by"
-msgstr "recibido por"
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr "Fecha de emisión"
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr "Fecha de expedición del pedido"
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr "Usuario o grupo responsable de este pedido"
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr "Punto de contacto para este pedido"
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr "Dirección de la empresa para este pedido"
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr "Referencia del pedido"
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr "Estado de la orden de compra"
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr "Empresa de la cual se están encargando los artículos"
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr "Referencia del proveedor"
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr "Código de referencia de pedido del proveedor"
+
+#: order/models.py:546
+msgid "received by"
+msgstr "recibido por"
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr "La fecha de pedido fue completada"
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "Destinación"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr "Destino para los artículos recibidos"
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr "El proveedor de la parte debe coincidir con el proveedor de PO"
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr "La cantidad debe ser un número positivo"
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "Cliente"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr "Empresa a la que se venden los artículos"
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr "Estado de la orden de venta"
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr "Referencia del cliente "
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr "Código de referencia de pedido del cliente"
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr "Fecha de envío"
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr "enviado por"
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr "La orden ya fue completada"
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr "La orden ya fue cancelada"
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr "Sólo una orden abierta puede ser marcada como completa"
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr "El pedido no se puede completar porque hay envíos incompletos"
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr "El pedido no se puede completar ya que hay asignaciones incompletas"
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr "El pedido no se puede completar porque hay partidas incompletas"
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr "Cantidad del artículo"
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr "Referencia de partida"
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr "Notas de partida"
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr "Fecha objetivo para esta partida (dejar en blanco para usar la fecha de destino de la orden)"
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr "Descripción de partida (opcional)"
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr "Contexto adicional para esta línea"
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr "Precio unitario"
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr "La parte del proveedor debe coincidir con el proveedor"
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr "Parte del proveedor"
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr "Recibido"
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr "Número de artículos recibidos"
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr "Precio de Compra"
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr "Precio de compra unitario"
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr "Una parte virtual no puede ser asignada a un pedido de venta"
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr "Sólo las partes vendibles pueden ser asignadas a un pedido de venta"
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "Precio de Venta"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr "Precio de venta unitario"
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Enviado"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr "Cantidad enviada"
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr "Fecha del envío"
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr "Fecha de entrega"
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr "Fecha de entrega del envío"
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr "Revisado por"
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr "Usuario que revisó este envío"
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr "Envío"
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr "Número de envío"
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr "Número de Seguimiento"
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr "Información de seguimiento del envío"
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr "Número de factura"
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr "Número de referencia para la factura asociada"
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr "El envío ya ha sido enviado"
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr "El envío no tiene artículos de stock asignados"
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr "El artículo de stock no ha sido asignado"
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr "No se puede asignar el artículo de stock a una línea con una parte diferente"
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr "No se puede asignar stock a una línea sin una parte"
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr "La cantidad de asignación no puede exceder la cantidad de stock"
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr "La cantidad debe ser 1 para el stock serializado"
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr "La orden de venta no coincide con el envío"
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr "El envío no coincide con el pedido de venta"
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr "Línea"
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr "Referencia del envío del pedido de venta"
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr "Ítem"
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr "Seleccionar artículo de stock para asignar"
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr "Especificar la cantidad de asignación de stock"
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr "Referencia de la orden de devolución"
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr "Empresa de la cual se están devolviendo los artículos"
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr "Estado de la orden de devolución"
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr "El artículo de almacén debe ser especificado"
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr "La cantidad de retorno excede la cantidad de existencias"
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr "La cantidad de retorno debe ser mayor que cero"
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr "Cantidad inválida para el artículo de stock serializado"
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr "Seleccionar el artículo a devolver del cliente"
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr "Fecha de recepción"
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr "La fecha en la que se recibió este artículo de devolución"
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr "Resultado"
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr "Salida para esta partida"
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr "Costo asociado con la devolución o reparación para esta partida"
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr "Duplicar pedido"
 msgid "Specify options for duplicating this order"
 msgstr "Especificar opciones para duplicar este pedido"
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr "ID de pedido inválido"
 
@@ -4751,7 +4794,7 @@ msgstr "Combinar artículos"
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr "SKU"
 
@@ -4787,7 +4830,7 @@ msgstr "Partida"
 msgid "Line item does not match purchase order"
 msgstr "La partida no coincide con la orden de compra"
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr "Seleccione la ubicación de destino para los artículos recibidos"
 
@@ -4811,7 +4854,7 @@ msgstr "Introduzca números de serie para artículos de almacén entrantes"
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr "Código de barras en uso"
 msgid "An integer quantity must be provided for trackable parts"
 msgstr "Debe proporcionarse una cantidad entera para las partes rastreables"
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr "Se deben proporcionar las partidas"
 
@@ -4891,32 +4934,32 @@ msgstr "No se han encontrado coincidencias para los siguientes números de serie
 msgid "The following serial numbers are unavailable"
 msgstr "Los siguientes números de serie no están disponibles"
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr "Partida de orden de devolución"
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr "La partida no coincide con la orden de devolución"
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr "La partida ya ha sido recibida"
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr "Los artículos sólo pueden ser recibidos contra pedidos en curso"
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr "Cantidad a devolver"
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr "Moneda de precio de línea"
 
@@ -4970,107 +5013,103 @@ msgstr "Orden de venta atrasada"
 msgid "Sales order {so} is now overdue"
 msgstr "La orden de venta {so} está atrasada"
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr "Favoritos"
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr "Profundidad"
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr "Filtrar por profundidad de categoría"
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr "Nivel superior"
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr "Filtrar por categorías de nivel superior"
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr "En cascada"
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr "Tiene resultados"
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr "Orden de compra entrante"
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr "Orden de venta saliente"
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr "Validación de Lista de Materiales"
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr "Esta opción debe ser seleccionada"
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr "¡No puedes hacer que esta categoría de partes sea estructural porque algunas partes ya están asignadas!"
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "Partes"
 
@@ -5235,7 +5274,7 @@ msgstr "Palabras clave para mejorar la visibilidad en los resultados de búsqued
 msgid "Part category"
 msgstr "Categoría de parte"
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr "IPN"
@@ -5244,7 +5283,7 @@ msgstr "IPN"
 msgid "Part revision or version number"
 msgstr "Revisión de parte o número de versión"
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr "Revisión"
 
@@ -5276,7 +5315,7 @@ msgstr "Expiración por defecto"
 msgid "Expiry time (in days) for stock items of this part"
 msgstr "Tiempo de expiración (en días) para los artículos de stock de esta parte"
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr "Stock mínimo"
 
@@ -5613,7 +5652,7 @@ msgstr "Descripción de prueba"
 msgid "Enter description for this test"
 msgstr "Introduce la descripción para esta prueba"
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "Habilitado"
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr "No hay partes seleccionadas"
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr "Seleccionar categoría"
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr "Parte original"
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr "Seleccione la parte original a duplicar"
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr "Copiar Imagen"
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr "Copiar imagen desde la parte original"
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr "Copiar BOM"
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr "Copiar la factura de materiales de la parte original"
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr "Copiar Parámetros"
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr "Copiar datos del parámetro de la parte original"
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr "Copiar Notas"
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr "Cantidad Inicial de Stock"
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr "Seleccione proveedor (o déjelo en blanco para saltar)"
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr "Seleccionar fabricante (o dejar en blanco para saltar)"
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr "Número de parte del fabricante"
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr "La empresa seleccionada no es un proveedor válido"
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr "La empresa seleccionada no es un fabricante válido"
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr "Nombre de categoría"
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr "En construcción"
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr "Elementos de stock"
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "Proveedores"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr "Inventario Total"
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr "Duplicar Parte"
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr "Stock Inicial"
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr "Crear Parte con cantidad inicial de stock"
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr "Información del proveedor"
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr "Añadir información inicial del proveedor para esta parte"
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr "Copiar Parámetros de Categoría"
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada"
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr "Imagen Existente"
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr "El archivo de imagen no existe"
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr "Generar informe"
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr "Actualizar partes"
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Falló la comprobación en segundo plano del worker"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr "Precio mínimo"
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr "Anular el valor calculado para precio mínimo"
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr "Precio mínimo de moneda"
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr "Precio máximo"
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr "Precio máximo de moneda"
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr "Actualizar"
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr "El precio mínimo no debe ser mayor que el precio máximo"
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr "El precio máximo no debe ser inferior al precio mínimo"
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr "Puede construir"
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr "Seleccionar parte de la que copiar BOM"
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr "Eliminar Datos Existentes"
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr "Eliminar artículos BOM existentes antes de copiar"
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr "Incluye Heredado"
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr "Incluye artículos BOM que son heredados de partes con plantillas"
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr "Omitir filas no válidas"
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr "Activar esta opción para omitir filas inválidas"
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr "Copiar partes sustitutas"
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr "Se encontró artículo coincidente"
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr "La pieza del proveedor no coincide con la partida"
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr "La partida ya está completada"
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr "No se pudo recibir partida"
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr "Impresión de etiquetas fallida"
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr "Proporciona soporte nativo para códigos de barras"
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr "Notificaciones de InvenTree"
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr "Impresora de etiquetas PDF de InvenTree"
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr "Proporciona soporte nativo para imprimir etiquetas PDF"
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr "Modo de depuración"
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr "Activar modo de depuración - devuelve código HTML en lugar de PDF"
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr "Complemento integrado"
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr "Complemento"
 
@@ -6801,21 +6940,21 @@ msgstr "Complemento"
 msgid "Method"
 msgstr "Método"
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr "No se encontró autor"
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr "El complemento '{p}' no es compatible con la versión actual de InvenTree {v}"
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr "El complemento requiere al menos la versión {v}"
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr "El complemento requiere como máximo la versión {v}"
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr "Dimensiones de etiqueta inválidas"
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr "Legal"
 msgid "Letter"
 msgstr "Carta"
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr "Nombre de la plantilla"
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr "Adjuntar al modelo al imprimir"
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr "Guardar la salida del informe como un archivo adjunto contra la instancia del modelo enlazado al imprimir"
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr "Patrón de Nombre de archivo"
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "Filtros"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr "Tamaño de página para reportes PDF"
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "Ancho [mm]"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr "Ancho de la etiqueta, especificado en mm"
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "Altura [mm]"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr "Altura de la etiqueta, especificada en mm"
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr "Progreso"
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr "Fragmento"
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr "Archivo fragmento de informe"
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr "Descripción de archivo de fragmento"
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr "Activo"
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr "Reportar archivo de activos"
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr "Descripción del archivo de activos"
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr "Selecciona la plantilla de etiqueta"
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr "Complemento de impresión"
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr "Selecciona el complemento a usar para imprimir etiquetas"
 
@@ -7370,103 +7472,103 @@ msgstr "Ubicación principal"
 msgid "Filter by parent location"
 msgstr "Filtrar por ubicación principal"
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr "Nombre de pieza (insensible a mayúsculas y minúsculas)"
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr "El nombre de la pieza contiene (insensible a mayúsculas y minúsculas)"
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr "Nombre de la pieza (expresión regular)"
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr "IPN de Pieza (insensible a mayúsculas y minúsculas)"
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr "IPN de pieza contiene (insensible a mayúsculas y minúsculas)"
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr "IPN de Pieza (expresión regular)"
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr "Existencias mínimas"
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr "Existencias máximas"
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr "Código de estado"
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr "Ubicación externa"
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr "Consumido por orden de construcción"
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr "Instalado en otro artículo de existencias"
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr "Árbol de piezas"
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr "Actualizado antes de"
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr "Actualizado después de"
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr "Inventario antes de"
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr "Inventario después de"
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr "Desactualizado"
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr "Cantidad requerida"
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr "Debe suministrarse una parte válida"
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr "Seleccionar Propietario"
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr "Externo"
 
@@ -8356,199 +8458,199 @@ msgstr "Órdenes de venta"
 msgid "Return Orders"
 msgstr "Ordenes de devolución"
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr "Permiso establecido"
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "Grupo"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "Vista"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "Permiso para ver artículos"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr "Añadir"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "Permiso para añadir artículos"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "Cambiar"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "Permisos para editar artículos"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "Eliminar"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "Permiso para eliminar artículos"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Nombre de usuario"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Nombre"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "Nombre del usuario"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Apellido"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "Apellido del usuario"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "Dirección de correo del usuario"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "Personal"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr "Tiene este usuario permisos de personal"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr "Superusuario"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr "Es este usuario un superusuario"
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "Esta cuenta de usuario está activa"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "No tiene permiso para cambiar este rol de usuario."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Solo los superusuarios pueden crear nuevos usuarios"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "Su cuenta ha sido creada."
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "Por favor, utilice la función de restablecer la contraseña para iniciar sesión"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "Bienvenido a InvenTree"
 
diff --git a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po
index 6c2c27c1bb..192717d1e2 100644
--- a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Estonian\n"
 "Language: et_EE\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr ""
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Teil ei ole selle lehe vaatamiseks luba"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr ""
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr ""
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr ""
 msgid "Provided value does not match required pattern: "
 msgstr ""
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr ""
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr ""
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr ""
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr "Hiina (traditsiooniline)"
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "E-post"
 
@@ -391,19 +403,19 @@ msgstr ""
 msgid "Invalid choice"
 msgstr "Vigane valik"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Nimi"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Kirjeldus"
 msgid "Description (optional)"
 msgstr "Kirjeldus (valikuline)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Tee"
 
@@ -510,28 +522,28 @@ msgstr ""
 msgid "Invalid value for overage"
 msgstr ""
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr ""
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr "Osa"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr ""
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Valikuline"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Jälgitud"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr ""
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Saadaval"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr ""
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr ""
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr ""
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr ""
 msgid "Reference"
 msgstr "Tootekood"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr ""
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr ""
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr ""
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr ""
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr ""
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr ""
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr ""
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr ""
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr ""
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr ""
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Koostamise olek"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr ""
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr ""
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr ""
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Loomise kuupäev"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr ""
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr ""
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr ""
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr ""
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr ""
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr ""
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr ""
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr ""
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr ""
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr ""
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr ""
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr ""
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr ""
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr ""
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr "Kogus"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr ""
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr ""
 
@@ -1034,10 +1057,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Asukoht"
 
@@ -1053,7 +1076,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr ""
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Staatus"
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "Saadaval laos"
 
@@ -1356,7 +1379,7 @@ msgstr "Katkestatud"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Valmis"
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr "Pluginat pole"
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "Uuendatud"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr "Seade võti"
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "Seade väärtus"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr ""
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr ""
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr "ID"
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "Pealkiri"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Link"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "Avaldatud"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "Autor"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "Kokkuvõte"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr "Loetud"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "Pilt"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "Pildifail"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr "Ühiku nimi"
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr "Sümbol"
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr "Definitsioon"
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr "Ühiku definitsioon"
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Manus"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Puuduv fail"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Puuduv väline link"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Vali fail, mida lisada"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Kommentaar"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr "Faili suurus"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr "Silt"
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "Loodud"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr "Andmed"
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr "Vöötkoodi andmed"
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr "Kontekst"
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr "Vastus"
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr "Tulemus"
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr "Failinimi"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr "Mudeli liik"
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "Mall"
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "Komponent"
 
@@ -2415,7 +2438,7 @@ msgstr "Ostetav"
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Lehe suurus"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "Tootja"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Ettevõte"
 
@@ -3497,8 +3520,8 @@ msgstr "Kontakttelefoni number"
 msgid "Contact email address"
 msgstr "Kontakt e-postiaadress"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr ""
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "Aadress"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "Tarnija"
 
@@ -3713,7 +3736,7 @@ msgstr "Tarnija"
 msgid "Select supplier"
 msgstr "Vali tarnija"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr ""
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Andmefail"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr ""
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr ""
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "Müügihind"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Saadetud"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr "Saadetis"
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr "Rida"
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr "Määrake selle tellimuse dubleerimise valikud"
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr "Vale tellimuse ID"
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr "Tootekood"
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr "Järgmised seerianumbrid ei ole saadaval"
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr "Sügavus"
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "Osad"
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr "Osa kategooria"
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr "Minimaalne laoseis"
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr "Vali kategooria"
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr "Originaalosa"
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr "Kopeeri pilt"
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr "Kopeeri parameetrid"
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr "Kategooria nimi"
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr "Ehitamine"
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "Tarnijad"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr "Tarnija info"
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr ""
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr "Minimaalne hind"
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr "Maksimaalne hind"
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr "Uuenda"
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr "Valikud"
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr "Piirjoon"
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr "Sisseehitatud plugin"
 msgid "Package Plugin"
 msgstr "Paki plugin"
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr "Plugin"
 
@@ -6801,21 +6940,21 @@ msgstr "Plugin"
 msgid "Method"
 msgstr "Meetod"
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr "Autorit ei leitud"
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr "Lisa mudelile printimisel"
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr "Salvesta aruande väljund manusega seotud mudeli eksemplari juurde printimisel"
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "Filtrid"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr "Mallifaili"
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "Grupp"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "Vaade"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "Muuda"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "Kustuta"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Kasutajanimi"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Eesnimi"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Perekonnanimi"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr ""
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr ""
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr ""
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr ""
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr ""
 
diff --git a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po
index 42ee6acd0e..7eb5700cfd 100644
--- a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Persian\n"
 "Language: fa_IR\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "Address e API peida nashod"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "کاربر سطح دسترسی نمایش این مدل را ندارد"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr ""
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr ""
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "مقدار '{name}' در قالب الگو ظاهر قرار نمی گی
 msgid "Provided value does not match required pattern: "
 msgstr "مقدار ارائه شده با الگوی مورد نیاز مطابقت ندارد: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr ""
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr ""
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr ""
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr ""
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr ""
 
@@ -391,19 +403,19 @@ msgstr ""
 msgid "Invalid choice"
 msgstr ""
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr ""
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr ""
 msgid "Description (optional)"
 msgstr ""
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr ""
 
@@ -510,28 +522,28 @@ msgstr ""
 msgid "Invalid value for overage"
 msgstr ""
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr ""
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr ""
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr ""
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr ""
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr ""
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr ""
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr ""
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr ""
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr ""
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr ""
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr ""
 msgid "Reference"
 msgstr ""
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr ""
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "مرجع سفارش فروش"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "منبع محل"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr ""
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "مقصد"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr ""
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr ""
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr ""
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr ""
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr ""
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr ""
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr ""
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr ""
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr ""
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr ""
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr ""
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr ""
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr ""
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr ""
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr ""
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr ""
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr ""
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr ""
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr ""
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr ""
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr ""
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr ""
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr ""
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr ""
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr ""
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr ""
 
@@ -1034,10 +1057,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr ""
 
@@ -1053,7 +1076,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr ""
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr ""
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr ""
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr ""
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr ""
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr ""
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr ""
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr ""
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr ""
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr ""
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr ""
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr ""
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr ""
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr ""
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr ""
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr ""
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr ""
 
@@ -2415,7 +2438,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr ""
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr ""
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr ""
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr ""
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr ""
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr ""
 
@@ -3713,7 +3736,7 @@ msgstr ""
 msgid "Select supplier"
 msgstr ""
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr ""
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "فایل‌های داده"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr ""
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr ""
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr ""
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr ""
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr ""
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr ""
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr ""
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr ""
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr ""
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr ""
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr ""
 
diff --git a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po
index c4ae8f62ed..5ffeaa6b69 100644
--- a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Finnish\n"
 "Language: fi_FI\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "API-rajapintaa ei löydy"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Käyttäjän oikeudet eivät riitä kohteen tarkastelemiseen"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr ""
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Annettu määrä on virheellinen"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr ""
 msgid "Provided value does not match required pattern: "
 msgstr ""
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Tyhjä sarjanumero"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Duplikaatti sarjanumero"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Sarjanumeroita ei löytynyt"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr ""
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr ""
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "Sähköposti"
 
@@ -391,19 +403,19 @@ msgstr ""
 msgid "Invalid choice"
 msgstr "Virheellinen valinta"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Nimi"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Kuvaus"
 msgid "Description (optional)"
 msgstr "Kuvaus (valinnainen)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Polku"
 
@@ -510,28 +522,28 @@ msgstr ""
 msgid "Invalid value for overage"
 msgstr ""
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr ""
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr "Osa"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "Kategoria"
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr ""
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr ""
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr ""
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr ""
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Saatavilla"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr ""
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr ""
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr ""
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr ""
 msgid "Reference"
 msgstr ""
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr ""
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr ""
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr ""
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr ""
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr ""
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr ""
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr ""
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr ""
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr ""
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr ""
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr ""
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr ""
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr ""
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr ""
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr ""
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr ""
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr ""
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr ""
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr ""
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr ""
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr ""
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Ulkoinen linkki"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Linkki ulkoiseen URLiin"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr ""
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr ""
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr ""
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr ""
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr ""
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr "Määrä"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr ""
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr "Varastotuote"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr ""
 
@@ -1034,10 +1057,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Sijainti"
 
@@ -1053,7 +1076,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr ""
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Tila"
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr "Peruttu"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Valmis"
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "Päivitetty"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "Viimeisimmän päivityksen aikaleima"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Käyttäjä"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "Hinta"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Aktiivinen"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "Salaisuus"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr "Isäntä"
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "Otsikko"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Linkki"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "Julkaistu"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "Julkaisija"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "Yhteenveto"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "Kuva"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "Kuvatiedosto"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Liite"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Puuttuva tiedosto"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Puuttuva ulkoinen linkki"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Valitse liitettävä tiedosto"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Kommentti"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "Arvo"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr ""
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr "Tiedostonimi"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr ""
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "Komponentti"
 
@@ -2415,7 +2438,7 @@ msgstr "Ostettavissa"
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Sivun koko"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "Valmistaja"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Yritys"
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "Kontakti"
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "Osoite"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr "Valitse valmistaja"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "Toimittaja"
 
@@ -3713,7 +3736,7 @@ msgstr "Toimittaja"
 msgid "Select supplier"
 msgstr "Valitse toimittaja"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr "Toimittajan varastonimike"
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr ""
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Datatiedosto"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "Valmis"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "Hinta yhteensä"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr "Tilauksen valuutta"
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr "Tilauksen viite"
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr "Tilauksen viite"
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "Asiakas"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr "Asiakkaan viite "
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr "Vastaanotettu"
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Lähetetty"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr "Seurantakoodi"
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr "Laskunumero"
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr ""
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "Käytössä"
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr "Valmistajan osanumero"
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr "Luo raportti"
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr ""
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "Suodattimet"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "Leveys [mm]"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "Korkeus [mm]"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "Ryhmä"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "Näytä"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "Oikeus tarkastella kohteita"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "Oikeus lisätä kohteita"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "Muuta"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "Oikeus muokata kohteita"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "Poista"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "Oikeus poistaa kohteita"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Käyttäjätunnus"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Etunimi"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Sukunimi"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr ""
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr ""
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr ""
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr ""
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr ""
 
diff --git a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po
index 73c3d1c2e6..dbf39a1a78 100644
--- a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: French\n"
 "Language: fr_FR\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "Point de terminaison de l'API introuvable"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr "Filtres fournis invalides"
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "L'utilisateur n'a pas la permission de voir ce modèle"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "Impossible de convertir {original} en {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Quantité fournie invalide"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr "Valeur décimale invalide"
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "La valeur '{name}' n'apparaît pas dans le format du modèle"
 msgid "Provided value does not match required pattern: "
 msgstr "La valeur fournie ne correspond pas au modèle requis : "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Chaîne de numéro de série vide"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Numéro de série en doublon"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr "Groupe invalide : {group}"
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "La plage de groupe {group} dépasse la quantité autorisée ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Aucun numéro de série trouvé"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Le nombre de numéros de série uniques ({len(serials)}) doit correspondre à la quantité ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Retirer les balises HTML de cette valeur"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr "Chinois (Traditionnel)"
 msgid "Log in to the app"
 msgstr "Se connecter à l'application"
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "E-mail"
 
@@ -391,19 +403,19 @@ msgstr "Les noms dupliqués ne peuvent pas exister sous le même parent"
 msgid "Invalid choice"
 msgstr "Choix invalide"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Nom"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Description"
 msgid "Description (optional)"
 msgstr "Description (facultative)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Chemin d'accès"
 
@@ -510,28 +522,28 @@ msgstr "Le surplus ne doit pas dépasser 100%"
 msgid "Invalid value for overage"
 msgstr "Valeur invalide pour le dépassement"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "Statut de la commande"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Fabrication parente"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr "Inclure les variantes"
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr "Inclure les variantes"
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr "Inclure les variantes"
 msgid "Part"
 msgstr "Pièce"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "Catégorie"
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "La construction doit être annulée avant de pouvoir être supprimée"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "Consommable"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Facultatif"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "Assemblage"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Suivi"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr "Testable"
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Allouée"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Disponible"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Ordre de Fabrication"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Ordres de Fabrication"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr "La liste des composants de l'assemblage n'a pas été validée"
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Choix invalide pour la fabrication parente"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "Un utilisateur ou un groupe responsable doit être spécifié"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "La pièce de commande de construction ne peut pas être changée"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Référence de l' Ordre de Fabrication"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Référence de l' Ordre de Fabrication"
 msgid "Reference"
 msgstr "Référence"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "Brève description de la fabrication (optionnel)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "BuildOrder associé a cette fabrication"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Sélectionnez la pièce à construire"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Bon de commande de référence"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Commande de vente à laquelle cette construction est allouée"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Emplacement d'origine"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Sélectionner l'emplacement à partir duquel le stock doit être pris pour cette construction (laisser vide pour prendre à partir de n'importe quel emplacement de stock)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Emplacement cible"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Sélectionnez l'emplacement où les éléments complétés seront stockés"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Quantité a fabriquer"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Nombre de stock items à construire"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Articles terminés"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Nombre d'articles de stock qui ont été terminés"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "État de la construction"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Code de statut de construction"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Code de lot"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Code de lot pour ce build output"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Date de création"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Date d'achèvement cible"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Date cible pour l'achèvement de la construction. La construction sera en retard après cette date."
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Date d'achèvement"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "achevé par"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Émis par"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "Utilisateur ayant émis cette commande de construction"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Responsable"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "Utilisateur ou groupe responsable de cet ordre de construction"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Lien Externe"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Lien vers une url externe"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "Priorité de fabrication"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "Priorité de cet ordre de fabrication"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "Code du projet"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "Code de projet pour cet ordre de construction"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr "Échec du déchargement de la tâche pour terminer les allocations de construction"
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "La commande de construction {build} a été effectuée"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "Une commande de construction a été effectuée"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr "Les numéros de série doivent être fournis pour les pièces traçables"
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "Pas d'ordre de production défini"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "L'ordre de production a déjà été réalisé"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "L'ordre de production de correspond pas à l'ordre de commande"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "La quantité doit être supérieure à zéro"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "La quantité ne peut pas être supérieure à la quantité de sortie"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "La sortie de compilation {serial} n'a pas réussi tous les tests requis"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "Création de l'objet"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "Création de l'objet"
 msgid "Quantity"
 msgstr "Quantité"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "Quantité requise pour la commande de construction"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "L'élément de construction doit spécifier une sortie de construction, la pièce maîtresse étant marquée comme objet traçable"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "La quantité allouée ({q}) ne doit pas excéder la quantité disponible ({a})"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "L'article de stock est suralloué"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "La quantité allouée doit être supérieure à zéro"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "La quantité doit être de 1 pour stock sérialisé"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "L'article de stock sélectionné ne correspond pas à la ligne BOM"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "L'article de stock sélectionné ne correspond pas à la ligne BOM"
 msgid "Stock Item"
 msgstr "Article en stock"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Stock d'origine de l'article"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Quantité de stock à allouer à la construction"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Installer dans"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Stock de destination de l'article"
 
@@ -1034,10 +1057,10 @@ msgstr "Entrer les numéros de séries pour la fabrication"
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Emplacement"
 
@@ -1053,7 +1076,7 @@ msgstr "Allouer automatiquement les numéros de série"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "Affecter automatiquement les éléments requis avec les numéros de série correspondants"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "Les numéros de série suivants existent déjà, ou sont invalides"
@@ -1082,10 +1105,10 @@ msgstr "Motif de l'élimination des produits de construction(s)"
 msgid "Location for completed build outputs"
 msgstr "Emplacement des ordres de production achevés"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "État"
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr "Pièce fournisseur"
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr "Autoriser les variantes"
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "Article du BOM"
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr "Stock alloué"
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr "En Commande"
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr "En Production"
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr "Stock externe"
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "Stock disponible"
 
@@ -1356,7 +1379,7 @@ msgstr "Annulé"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Terminé"
 
@@ -1405,536 +1428,536 @@ msgstr "Aucun code de devise valide fourni"
 msgid "No plugin"
 msgstr "Pas de plugin"
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "Mise à jour"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "Date de la dernière mise à jour"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "Code projet unique"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "Description du projet"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr "Utilisateur ou groupe responsable de ce projet"
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr "Paramétrés des touches"
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "Valeur du paramètre"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr "La valeur choisie n'est pas une option valide"
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr "La valeur doit être une valeur booléenne"
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr "La valeur doit être un nombre entier"
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr "Valeur doit être un nombre valide"
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr "La chaîne de caractères constituant la clé doit être unique"
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Utilisateur"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "Prix"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Actif"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr "Ce webhook (lien de rappel HTTP) est-il actif"
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr "Jeton"
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr "Jeton d'accès"
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "Confidentiel"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr "ID message"
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr "Identifiant unique pour ce message"
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr "Hôte"
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr "Hôte à partir duquel ce message a été reçu"
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr "Entête"
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr "En-tête de ce message"
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr "Corps"
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr "Corps de ce message"
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr "Endpoint à partir duquel ce message a été reçu"
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr "Le travail sur ce message est-il terminé ?"
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr "Id"
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "Titre"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Lien"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "Publié"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "Auteur"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "Résumé"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr "Lu"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr "Cette nouvelle a-t-elle été lue ?"
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "Image"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "Fichier image"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr "Symbole"
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr "Symbole d'unité facultatif"
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr "Définition"
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr "Définition de l'unité"
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Pièce jointe"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Fichier manquant"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Lien externe manquant"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Sélectionnez un fichier à joindre"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Commentaire"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "Valeur"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr "Étiquette"
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "Créé le"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr "Dernière mise à jour"
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr "Analyse du code-barres"
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr "Données"
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr "Données du code-barres"
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr "Utilisateur qui a scanné le code-barres"
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr "Date et heure du scan de code-barres"
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr "Contexte"
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr "Réponse"
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr "Résultat"
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr "{verbose_name} annulé"
 msgid "A order that is assigned to you was canceled"
 msgstr "Une commande qui vous est assignée a été annulée"
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr "Articles reçus"
 
@@ -2036,7 +2059,7 @@ msgstr "Mots-clés arguments tâche"
 msgid "Filename"
 msgstr "Nom du fichier"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr "Copier les templates de paramètres de catégorie"
 msgid "Copy category parameter templates when creating a part"
 msgstr "Copier les templates de paramètres de la catégorie lors de la création d'une pièce"
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "Modèle"
@@ -2398,8 +2421,8 @@ msgstr "Les pièces sont des templates par défaut"
 msgid "Parts can be assembled from other components by default"
 msgstr "Les pièces peuvent être assemblées à partir d'autres composants par défaut"
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "Composant"
 
@@ -2415,7 +2438,7 @@ msgstr "Achetable"
 msgid "Parts are purchaseable by default"
 msgstr "Les pièces sont achetables par défaut"
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr "Vendable"
 
@@ -2619,8 +2642,8 @@ msgstr "Journal des erreurs"
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Taille de la page"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr "Le fournisseur est actif"
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "Fabricant"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Société"
 
@@ -3497,8 +3520,8 @@ msgstr "Numéro de téléphone de contact"
 msgid "Contact email address"
 msgstr "Adresse e-mail de contact"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "Contact"
 
@@ -3542,7 +3565,7 @@ msgstr "Cette entreprise fabrique-t-elle des pièces?"
 msgid "Default currency used for this company"
 msgstr "Devise par défaut utilisée pour cette entreprise"
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "Adresse"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr "Sélectionner un fabricant"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr "La pièce du fabricant liée doit faire référence à la même pièce de base"
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "Fournisseur"
 
@@ -3713,7 +3736,7 @@ msgstr "Fournisseur"
 msgid "Select supplier"
 msgstr "Sélectionner un fournisseur"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr "Unité de gestion des stocks des fournisseurs"
 
@@ -3733,7 +3756,7 @@ msgstr "Lien de la pièce du fournisseur externe"
 msgid "Supplier part description"
 msgstr "Description de la pièce du fournisseur"
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr "Devise par défaut utilisée pour ce fournisseur"
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr "En Stock"
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr "Placé"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Fichier de données"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr "Erreurs"
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr "Valide"
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr "Copies"
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr "Nombre de copies à imprimer pour chaque étiquette"
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr "Connecté"
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr "Inconnu"
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr "Impression"
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr "Aucun média"
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr "Bourrage de papier"
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr "Déconnecté"
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr "Imprimante Etiquette"
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr "Impression directe des étiquettes pour divers articles."
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr "Emplacement Imprimante"
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr "Porter de l'imprimante sur un emplacement spécifique"
 
@@ -4117,7 +4160,7 @@ msgstr "Type de configuration"
 msgid "Order Reference"
 msgstr "Référence de commande"
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr "Créé par"
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr "Possède un Tarif"
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr "Commande"
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr "Commande Complétée"
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr "Pièces Internes"
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr "Commande En Attente"
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "Terminé"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr "Commande d’achat"
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr "Commande d’achat"
 msgid "Sales Order"
 msgstr "Commandes"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr "Retour de commande"
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "Prix Total"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr "Prix total pour cette commande"
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr "Devise de la commande"
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr "Description de la commande (facultatif)"
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr "Lien vers une page externe"
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "Date Cible"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr "Date prévue pour la livraison de la commande. La commande sera en retard après cette date."
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr "Utilisateur ou groupe responsable de cette commande"
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr "Adresse de l'entreprise pour cette commande"
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr "Référence de la commande"
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr "Statut de la commande d'achat"
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr "Société de laquelle les articles sont commandés"
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr "Référence du fournisseur"
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr "Code de référence de la commande fournisseur"
-
-#: order/models.py:584
-msgid "received by"
-msgstr "reçu par"
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr "Date d'émission"
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr "Date d'émission de la commande"
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr "Utilisateur ou groupe responsable de cette commande"
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr "Adresse de l'entreprise pour cette commande"
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr "Référence de la commande"
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr "Statut de la commande d'achat"
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr "Société de laquelle les articles sont commandés"
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr "Référence du fournisseur"
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr "Code de référence de la commande fournisseur"
+
+#: order/models.py:546
+msgid "received by"
+msgstr "reçu par"
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr "Date à laquelle la commande a été complété"
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "Destination"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr "La quantité doit être un nombre positif"
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "Client"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr "Société à laquelle les articles sont vendus"
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr "Référence client "
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr "Nom de l’expédition"
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr "expédié par"
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr "La commande ne peut pas être terminée car il y a des envois incomplets"
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr "Nombre d'élement"
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr "Prix unitaire"
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr "Pièce fournisseur"
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr "Reçu"
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr "Nombre d'éléments reçus"
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr "Prix d'achat"
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr "Prix d'achat unitaire"
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr "La pièce virtuelle ne peut pas être affectée à une commande"
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr "Seules les pièces vendues peuvent être attribuées à une commande"
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "Prix de vente"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr "Prix de vente unitaire"
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Expédié"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr "Quantité expédiée"
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr "Date d'expédition"
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr "Date de Livraison"
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr "Vérifié par"
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr "Utilisateur qui a vérifié cet envoi"
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr "Envoi"
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr "Numéro d'expédition"
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr "N° de suivi"
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr "Information de suivi des colis"
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr "N° de facture"
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr "Numéro de référence de la facture associée"
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr "Le colis a déjà été envoyé"
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr "L'expédition n'a pas d'articles en stock alloués"
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr "L'article de stock n'a pas été assigné"
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr "Impossible d'allouer l'article en stock à une ligne avec une autre pièce"
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr "Impossible d'allouer le stock à une ligne sans pièce"
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr "La quantité d'allocation ne peut pas excéder la quantité en stock"
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr "Ligne"
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr "Article"
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr "Statut du retour de commande"
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr "Entrez les numéros de série pour les articles de stock entrants"
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr "Le code-barres est déjà utilisé"
 msgid "An integer quantity must be provided for trackable parts"
 msgstr "Une quantité entière doit être fournie pour les pièces tracables"
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr "Aucune correspondance trouvée pour les numéros de série suivants"
 msgid "The following serial numbers are unavailable"
 msgstr "Les numéros de série suivants sont indisponibles"
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr "Profondeur"
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr "Premier niveau"
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr "Cascade"
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr "Utilise"
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "Pièces"
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr "Catégorie de la pièce"
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr "IPN"
@@ -5244,7 +5283,7 @@ msgstr "IPN"
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr "Révision"
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr "Stock Minimum"
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "Activé"
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr "Copier l'image"
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr "Copier les paramètres"
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr "Nom catégorie"
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr "Construction"
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr "Éléments en stock"
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "Fournisseurs"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr "Stock total"
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Échec de la vérification du processus d'arrière-plan"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr "Prix Minimum"
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr "Prix Maximum"
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr "Notifications InvenTree"
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr "Extension Intégrée"
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr "Extension"
 
@@ -6801,21 +6940,21 @@ msgstr "Extension"
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr "Nom du modèle"
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr "Modèle de nom de fichier"
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "Filtres"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "Largeur [mm]"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr "Largeur de l'étiquette, spécifiée en mm"
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "Hauteur [mm]"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr "Hauteur de l'étiquette, spécifiée en mm"
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr "Modèle d'étiquette"
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr "Extrait "
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr "Elément"
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr "Sélection du modèle d'étiquette"
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr "Emplacement parent"
 msgid "Filter by parent location"
 msgstr "Filtrer par emplacement parent"
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr "Emplacement externe"
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr "Date d'expiration avant"
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr "Date d’expiration après"
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr "Sélectionner un propriétaire"
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr "Ventes"
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr "Droit défini"
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "Groupe"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "Vue"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "Droit de voir des éléments"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr "Ajouter"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "Droit d'ajouter des éléments"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "Modifier"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "Droit de modifier des élément"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "Supprimer"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "Droit de supprimer des éléments"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Nom d'utilisateur"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Prénom"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "Prénom de l'utilisateur"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Nom"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "Nom de famille de l'utilisateur"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "Adresse e-mail de l'utilisateur"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "Staff"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr "Cet utilisateur a-t-il les permissions du staff"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr "Super-utilisateur"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr "Cet utilisateur est-il un super-utilisateur"
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "Ce compte d'utilisateur est-il actif"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "Vous n'avez pas la permission de modifier ce rôle utilisateur."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Seuls les super-utilisateurs peuvent créer de nouveaux utilisateurs"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "Votre compte a été créé."
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "Veuillez utiliser la fonction de réinitialisation du mot de passe pour vous connecter"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "Bienvenue dans InvenTree"
 
diff --git a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po
index 4ad540b5e1..bc6b22f33f 100644
--- a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Hebrew\n"
 "Language: he_IL\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr ""
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "למשתמש אין הרשאה לצפות במוזל הזה"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr ""
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr ""
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr ""
 msgid "Provided value does not match required pattern: "
 msgstr ""
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr ""
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr ""
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "מספרים סידוריים לא נמצאו"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr ""
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr "סינית (מסורתית)"
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "אימייל"
 
@@ -391,19 +403,19 @@ msgstr "שמות כפולים אינם יכולים להתקיים תחת אות
 msgid "Invalid choice"
 msgstr "בחירה שגויה"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "שם"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "תיאור"
 msgid "Description (optional)"
 msgstr "תיאור (לא חובה)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "נתיב"
 
@@ -510,28 +522,28 @@ msgstr ""
 msgid "Invalid value for overage"
 msgstr ""
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "מקור הבנייה"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr "רכיב"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr ""
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr ""
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr ""
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr ""
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr ""
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr ""
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr ""
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr ""
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr ""
 msgid "Reference"
 msgstr "מקט"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "בחר רכיב לבנייה"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr ""
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr ""
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr ""
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr ""
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr ""
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "כמות בניה"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr ""
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr ""
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr ""
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr ""
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr ""
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr ""
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr ""
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr ""
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr ""
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr ""
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr ""
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr ""
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr ""
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr ""
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr ""
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "קישור חיצוני"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr ""
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr ""
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr ""
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr ""
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr ""
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr "כמות"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr ""
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr ""
 
@@ -1034,10 +1057,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr ""
 
@@ -1053,7 +1076,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr ""
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr ""
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr "מבוטל"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "הושלם"
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "משתמש"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr ""
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "קישור"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr ""
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "קובץ מצורף"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "קובץ חסר"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "חסר קישור חיצוני"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "בחר קובץ לצירוף"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "הערה"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr ""
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr "שם קובץ"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr ""
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr ""
 
@@ -2415,7 +2438,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr ""
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr ""
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr ""
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr ""
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr ""
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr ""
 
@@ -3713,7 +3736,7 @@ msgstr ""
 msgid "Select supplier"
 msgstr ""
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr "מוקם"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr ""
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr ""
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr ""
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "נשלח"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr ""
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr ""
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr ""
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "שם משתמש"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "שם פרטי"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr ""
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr ""
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr ""
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr ""
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr ""
 
diff --git a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po
index f5812d2c86..34ad377bc7 100644
--- a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Hindi\n"
 "Language: hi_IN\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr ""
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr ""
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr ""
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr ""
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr ""
 msgid "Provided value does not match required pattern: "
 msgstr ""
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr ""
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr ""
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr ""
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr ""
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "ई-मेल"
 
@@ -391,19 +403,19 @@ msgstr ""
 msgid "Invalid choice"
 msgstr ""
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr ""
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr ""
 msgid "Description (optional)"
 msgstr ""
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr ""
 
@@ -510,28 +522,28 @@ msgstr ""
 msgid "Invalid value for overage"
 msgstr ""
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr ""
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr ""
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr ""
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr ""
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr ""
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr ""
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr ""
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr ""
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr ""
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr ""
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr ""
 msgid "Reference"
 msgstr ""
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr ""
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr ""
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr ""
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr ""
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr ""
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr ""
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr ""
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr ""
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr ""
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr ""
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr ""
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr ""
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr ""
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr ""
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr ""
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr ""
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr ""
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr ""
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr ""
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr ""
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr ""
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr ""
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr ""
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr ""
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr ""
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr ""
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr ""
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr ""
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr ""
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr ""
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr ""
 
@@ -1034,10 +1057,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr ""
 
@@ -1053,7 +1076,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr ""
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr ""
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr ""
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr ""
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr ""
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr ""
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr ""
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr ""
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr ""
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr ""
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr ""
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr ""
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr ""
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr ""
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr ""
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr ""
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr ""
 
@@ -2415,7 +2438,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr ""
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr ""
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr ""
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr ""
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr ""
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr ""
 
@@ -3713,7 +3736,7 @@ msgstr ""
 msgid "Select supplier"
 msgstr ""
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr ""
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr ""
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr ""
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr ""
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr ""
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr ""
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr ""
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr ""
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr ""
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr ""
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr ""
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr ""
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr ""
 
diff --git a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po
index 7a4311a571..d7cfe0de52 100644
--- a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Hungarian\n"
 "Language: hu_HU\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "API funkciót nem találom"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr "Érvénytelen szűrők vannak megadva"
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Nincs jogosultságod az adatok megtekintéséhez"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "{original} átváltása {unit}-ra sikertelen"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Nem megfelelő mennyiség"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr "Érvénytelen decimális érték"
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "A(z) '{name}' érték nem a szükséges minta szerinti"
 msgid "Provided value does not match required pattern: "
 msgstr "A megadott érték nem felel meg a szükséges mintának: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Üres sorozatszám"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Duplikált sorozatszám"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr "Érvénytelen csoport: {group}"
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "Csoport tartomány {group} több mint az engedélyezett ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Nem található sorozatszám"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Az egyedi sorozatszámok számának ({len(serials)}) meg kell egyeznie a mennyiséggel ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "HTML tag-ek eltávolítása ebből az értékből"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr "Kínai (Hagyományos)"
 msgid "Log in to the app"
 msgstr "Bejelentkezés az appba"
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "Email"
 
@@ -391,19 +403,19 @@ msgstr "Duplikált nevek nem lehetnek ugyanazon szülő alatt"
 msgid "Invalid choice"
 msgstr "Érvénytelen választás"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Név"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Leírás"
 msgid "Description (optional)"
 msgstr "Leírás (opcionális)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Elérési út"
 
@@ -510,28 +522,28 @@ msgstr "Túlszállítás nem lehet több mint 100%"
 msgid "Invalid value for overage"
 msgstr "Érvénytelen érték a túlszállításra"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "Rendelés állapota"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Szülő gyártás"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr "Változatokkal együtt"
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr "Változatokkal együtt"
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr "Változatokkal együtt"
 msgid "Part"
 msgstr "Alkatrész"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "Kategória"
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr "Fa kihagyása"
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "A gyártást be kell fejezni a törlés előtt"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "Fogyóeszköz"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Opcionális"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "Gyártmány"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Követett"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr "Ellenőrizhető"
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Lefoglalva"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Elérhető"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Gyártási utasítás"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Gyártási utasítások"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr "Az alkatrészjegyzék még nincs jóváhagyva"
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr "Nem lehet inaktív alkatrészre Gyártást kezdeményezni"
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr "Nem lehet lezáratlan alkatrészre Gyártást kezdeményezni"
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Hibás választás a szülő gyártásra"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "Meg kell adni felelős felhasználót vagy csoportot"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "Gyártási rendelés alkatrész nem változtatható"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Gyártási utasítás azonosító"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Gyártási utasítás azonosító"
 msgid "Reference"
 msgstr "Azonosító"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "Gyártás rövid leírása (opcionális)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "Gyártás, amihez ez a gyártás hozzá van rendelve"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Válassz alkatrészt a gyártáshoz"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Vevői rendelés azonosító"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Vevői rendelés amihez ez a gyártás hozzá van rendelve"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Forrás hely"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Válassz helyet ahonnan készletet vegyünk el ehhez a gyártáshoz (hagyd üresen ha bárhonnan)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Cél hely"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Válassz helyet ahol a kész tételek tárolva lesznek"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Gyártási mennyiség"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Gyártandó készlet tételek száma"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Kész tételek"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Elkészült készlet tételek száma"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Gyártási állapot"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Gyártás státusz kód"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Batch kód"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Batch kód a gyártás kimenetéhez"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Létrehozás dátuma"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Befejezés cél dátuma"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Cél dátum a gyártás befejezéséhez. Ez után késettnek számít majd."
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Befejezés dátuma"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "elkészítette"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Indította"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "Felhasználó aki ezt a gyártási utasítást kiállította"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Felelős"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "Felhasználó vagy csoport aki felelős ezért a gyártásért"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Külső link"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Link külső URL-re"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "Priorítás"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "Gyártási utasítás priorítása"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "Projektszám"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "Projekt kód a gyártáshoz"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr "A gyártási foglalások teljesítése háttérfeladat elvégzése nem sikerült"
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "A {build} gyártási utasítás elkészült"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "Gyártási utasítás elkészült"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr "Egyedi követésre jelölt alkatrészeknél kötelező sorozatszámot megadni"
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "Nincs gyártási kimenet megadva"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "Gyártási kimenet már kész"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "Gyártási kimenet nem egyezik a gyártási utasítással"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "Mennyiségnek nullánál többnek kell lennie"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "A mennyiség nem lehet több mint a gyártási mennyiség"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "A {serial} gyártási kimenet nem felelt meg az összes kötelező teszten"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr "Gyártási Rendelés Sor Tétel"
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "Gyártás objektum"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "Gyártás objektum"
 msgid "Quantity"
 msgstr "Mennyiség"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "Gyártáshoz szükséges mennyiség"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "Gyártási tételnek meg kell adnia a gyártási kimenetet, mivel a fő darab egyedi követésre kötelezett"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "A lefoglalt mennyiség ({q}) nem lépheti túl a szabad készletet ({a})"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "Készlet túlfoglalva"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "Lefoglalt mennyiségnek nullánál többnek kell lennie"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "Egyedi követésre kötelezett tételeknél a menyiség 1 kell legyen"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "A készlet tétel nem egyezik az alkatrészjegyzékkel"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "A készlet tétel nem egyezik az alkatrészjegyzékkel"
 msgid "Stock Item"
 msgstr "Készlet tétel"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Forrás készlet tétel"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Készlet mennyiség amit foglaljunk a gyártáshoz"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Beépítés ebbe"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Cél készlet tétel"
 
@@ -1034,10 +1057,10 @@ msgstr "Add meg a sorozatszámokat a gyártás kimenetéhez"
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Hely"
 
@@ -1053,7 +1076,7 @@ msgstr "Sorozatszámok automatikus hozzárendelése"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "Szükséges tételek automatikus hozzárendelése a megfelelő sorozatszámokkal"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "A következő sorozatszámok már léteznek vagy nem megfelelőek"
@@ -1082,10 +1105,10 @@ msgstr "Selejtezés oka"
 msgid "Location for completed build outputs"
 msgstr "A kész gyártási kimenetek helye"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Állapot"
 
@@ -1271,8 +1294,8 @@ msgstr "Alkatrészjegyzék Alkatrész Név"
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr "Beszállítói alkatrész"
@@ -1302,7 +1325,7 @@ msgid "Allow Variants"
 msgstr "Változatok"
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "Alkatrészjegyzék tétel"
 
@@ -1311,19 +1334,19 @@ msgid "Allocated Stock"
 msgstr "Lefoglalt készlet"
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr "Rendelve"
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr "Gyártásban"
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr "Külső raktárkészlet"
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "Elérhető készlet"
 
@@ -1357,7 +1380,7 @@ msgstr "Törölve"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Kész"
 
@@ -1406,536 +1429,536 @@ msgstr "Hiányzó érvényes valuta kód"
 msgid "No plugin"
 msgstr "Nincsen plugin"
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "Frissítve"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "Legutóbbi frissítés időpontja"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "Egyedi projektszám"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "Projekt leírása"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr "A projektért felelős felhasználó vagy csoport"
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "Beállítás értéke"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr "A kiválasztott érték nem egy érvényes lehetőség"
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr "Az érték bináris kell legyen"
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr "Az érték egész szám kell legyen"
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr "Kulcs string egyedi kell legyen"
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Felhasználó"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr "Ársáv mennyiség"
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "Ár"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr "Egységár egy meghatározott mennyiség esetén"
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr "Végpont"
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr "Végpont ahol ez a webhook érkezik"
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr "Webhook neve"
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Aktív"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr "Aktív-e ez a webhook"
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr "Token"
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr "Token a hozzáféréshez"
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "Titok"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr "Megosztott titok a HMAC-hoz"
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr "Üzenet azonosító"
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr "Egyedi azonosító ehhez az üzenethez"
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr "Kiszolgáló"
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr "Kiszolgáló ahonnan ez az üzenet érkezett"
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr "Fejléc"
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr "Üzenet fejléce"
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr "Törzs"
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr "Üzenet törzse"
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr "Végpont amin ez az üzenet érkezett"
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr "Dolgozott rajta"
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr "Befejeződött a munka ezzel az üzenettel?"
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr "Azonosító"
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "Cím"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Link"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "Közzétéve"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "Szerző"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "Összefoglaló"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr "Elolvasva"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr "Elolvasva?"
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "Kép"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "Képfájl"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr "A képhez tartozó model típus"
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr "A képhez tartozó model azonosító"
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr "Egyedi mértékegység"
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr "A mértékegység szimbólumának egyedinek kell lennie"
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr "A mértékegységnek valós azonosítónak kell lennie"
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr "Egység neve"
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr "Szimbólum"
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr "Opcionális mértékegység szimbólum"
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr "Definíció"
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr "Mértékegység definíció"
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Melléklet"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Hiányzó fájl"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Hiányzó külső link"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Válaszd ki a mellekelni kívánt fájlt"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Megjegyzés"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr "Melléklet megjegyzés"
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr "Feltöltés dátuma"
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr "A fájl feltöltésének dátuma"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr "Fájl mérete"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr "Fájlméret bájtban"
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr "A melléklet model típusa érvénytelen"
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr "Egyedi Állapot"
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr "Egyedi Állapotok"
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr "Hivatkozott Állapot Készlet"
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr "Az az Állapot készlet, melyet ez az egyedi állapot kibővít"
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr "Logikai kulcs"
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr "Az állapot logikai kulcsa amely megegyezik az üzleti logika egyedi állapotával"
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "Érték"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr "Az állapot neve"
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr "Címke"
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr "A felületen megjelenített címke"
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr "Szín"
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr "A felöleten megjelenő szín"
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr "Model"
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr "A Model amihez ez az állapot tartozik"
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr "Modelt választani kötelező"
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr "Kulcsot választani kötelező"
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr "Logikai kulcsot választani kötelező"
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr "A kulcs és a logikai kulcs nem lehet azonos"
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr "A kulcsnak eltérőnek kell lennie a hivatkozott állapotok logikai kulcsaitól"
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr "A logikai kulcsnak szerepelnie kell a hivatkozott állapotok logikai kulcsai közt"
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr "Lezárt"
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr "Forrás szöveg"
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr "Alapértelmezett bejegyzés"
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "Létrehozva"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr "Utoljára módosítva"
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr "Vonalkód beolvasás"
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr "Adat"
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr "Vonalkód adat"
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr "Időbélyeg"
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr "Kontextus"
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr "Válasz"
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr "Eredmény"
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1957,7 +1980,7 @@ msgstr "{verbose_name} megszakítva"
 msgid "A order that is assigned to you was canceled"
 msgstr "Egy hozzád rendelt megrendelés megszakítva"
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr "Készlet érkezett"
 
@@ -2037,7 +2060,7 @@ msgstr "Feladat kulcsszó paraméterek"
 msgid "Filename"
 msgstr "Fájlnév"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr "Modell típusa"
 
@@ -2385,8 +2408,8 @@ msgstr "Kategória paraméter sablonok másolása"
 msgid "Copy category parameter templates when creating a part"
 msgstr "Kategória paraméter sablonok másolása alkatrész létrehozásakor"
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "Sablon"
@@ -2399,8 +2422,8 @@ msgstr "Alkatrészek alapból sablon alkatrészek legyenek"
 msgid "Parts can be assembled from other components by default"
 msgstr "Alkatrészeket alapból lehessen gyártani másik alkatrészekből"
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "Összetevő"
 
@@ -2416,7 +2439,7 @@ msgstr "Beszerezhető"
 msgid "Parts are purchaseable by default"
 msgstr "Alkatrészek alapból beszerezhetők legyenek"
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr "Értékesíthető"
 
@@ -2620,8 +2643,8 @@ msgstr "Jelentési hibák naplózása"
 msgid "Log errors which occur when generating reports"
 msgstr "Jelentések generálása közben jelentkező hibák naplózása"
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Lapméret"
 
@@ -3453,12 +3476,12 @@ msgid "Supplier is Active"
 msgstr "A Beszállító Aktív"
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "Gyártó"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Cég"
 
@@ -3498,8 +3521,8 @@ msgstr "Kapcsolattartó telefonszáma"
 msgid "Contact email address"
 msgstr "Kapcsolattartó email címe"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "Névjegy"
 
@@ -3543,7 +3566,7 @@ msgstr "Gyárt ez a cég alkatrészeket?"
 msgid "Default currency used for this company"
 msgstr "Cég által használt alapértelmezett pénznem"
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "Cím"
 
@@ -3654,7 +3677,7 @@ msgid "Select manufacturer"
 msgstr "Gyártó kiválasztása"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr "MPN (Gyártói cikkszám)"
 
@@ -3703,10 +3726,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr "Kapcsolódó gyártói alkatrésznek ugyanarra a kiindulási alkatrészre kell hivatkoznia"
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "Beszállító"
 
@@ -3714,7 +3737,7 @@ msgstr "Beszállító"
 msgid "Select supplier"
 msgstr "Beszállító kiválasztása"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr "Beszállítói cikkszám"
 
@@ -3734,7 +3757,7 @@ msgstr "URL link a beszállítói alkatrészhez"
 msgid "Supplier part description"
 msgstr "Beszállítói alkatrész leírása"
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3806,10 +3829,34 @@ msgstr "Beszállító által használt alapértelmezett pénznem"
 msgid "Company Name"
 msgstr "Cégnév"
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr "Készleten"
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr "Saját Állapot Kulcs"
@@ -3842,10 +3889,6 @@ msgstr "Kiküldve"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr "Hibás export formátum"
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Adat fájl"
@@ -3926,7 +3969,7 @@ msgstr "Eredeti sor adat"
 msgid "Errors"
 msgstr "Hibák"
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr "Érvényes"
 
@@ -4014,51 +4057,51 @@ msgstr "Túl sok sor az adatfájlban"
 msgid "Value must be a valid dictionary object"
 msgstr "Az értéknek a érvényes szótár elemnek kell lennie"
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr "Másolatok"
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr "Címkénkénti nyomtatandó mennyiség"
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr "Csatlakoztatba"
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr "Ismeretlen"
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr "Nyomtatás"
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr "Nincs papír"
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr "Elakadt a papír"
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr "Nincs kapcsolat"
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr "Címkenyomtató"
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr "Közvetlen címkenyomtatás különféle tételekre."
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr "Nyomtató helye"
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr "Nyomtató korlátozása egy készlethelyhez"
 
@@ -4118,7 +4161,7 @@ msgstr "Konfiguráció típusa"
 msgid "Order Reference"
 msgstr "Rendelés azonosítója"
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr "Kintlévő"
 
@@ -4126,7 +4169,7 @@ msgstr "Kintlévő"
 msgid "Has Project Code"
 msgstr "Van projektszáma"
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr "Készítette"
 
@@ -4162,53 +4205,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr "Van árazás"
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr "Befejezve ez után"
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr "Rendelés"
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr "A rendelés teljesítve"
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr "Belső alkatrész"
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr "A rendelés függőben"
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "Kész"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr "Beszerzési rendelés"
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4216,452 +4259,452 @@ msgstr "Beszerzési rendelés"
 msgid "Sales Order"
 msgstr "Vevői rendelés"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr "Visszavétel"
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "Teljes ár"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr "A rendelés teljes ára"
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr "Rendelés pénzneme"
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr "Megrendeléshez használt pénznem (hagyd üresen a cégnél alapértelmezetthez)"
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr "A kapcsolattartó nem egyezik a kiválasztott céggel"
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr "Rendelés leírása (opcionális)"
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr "Válassz projektszámot ehhez a rendeléshez"
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr "Link külső weboldalra"
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "Cél dátum"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr "Várt teljesítési dátuma a megrendelésnek. Ezután már késésben lévőnek számít majd."
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr "Felhasználó vagy csoport aki felelőse ennek a rendelésnek"
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr "Kapcsolattartó ehhez a rendeléshez"
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr "Cég címei ehhez a rendeléshez"
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr "Rendelés azonosító"
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr "Beszerzési rendelés állapota"
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr "Cég akitől a tételek beszerzésre kerülnek"
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr "Beszállítói azonosító"
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr "Beszállítói rendelés azonosító kód"
-
-#: order/models.py:584
-msgid "received by"
-msgstr "érkeztette"
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr "Kiállítás dátuma"
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr "Kiállítás dátuma"
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr "Felhasználó vagy csoport aki felelőse ennek a rendelésnek"
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr "Kapcsolattartó ehhez a rendeléshez"
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr "Cég címei ehhez a rendeléshez"
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr "Rendelés azonosító"
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr "Beszerzési rendelés állapota"
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr "Cég akitől a tételek beszerzésre kerülnek"
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr "Beszállítói azonosító"
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr "Beszállítói rendelés azonosító kód"
+
+#: order/models.py:546
+msgid "received by"
+msgstr "érkeztette"
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr "Rendelés teljesítési dátuma"
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "Cél"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr "Az alkatrész beszállítója meg kell egyezzen a beszerzési rendelés beszállítójával"
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr "Mennyiség pozitív kell legyen"
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "Vevő"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr "Cég akinek a tételek értékesítésre kerülnek"
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr "Értékesítési rendelés állapot"
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr "Vevői azonosító "
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr "Megrendelés azonosító kódja a vevőnél"
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr "Kiszállítás dátuma"
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr "szállította"
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr "Rendelés már teljesítve"
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr "Rendelés már visszavonva"
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr "Csak nyitott rendelés jelölhető késznek"
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr "A rendelés nem jelölhető késznek mivel függő szállítmányok vannak"
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr "A rendelés nem jelölhető késznek mivel nem teljesített sortételek vannak"
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr "Tétel mennyiség"
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr "Sortétel azonosító"
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr "Sortétel megjegyzései"
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr "Cél dátuma ennek a sortételnek (hagyd üresen a rendelés céldátum használatához)"
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr "Sortétel leírása (opcionális)"
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr "További kontextus ehhez a sorhoz"
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr "Egységár"
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr "Vevői Rendelés Sortétel"
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr "Beszállítói alkatrésznek egyeznie kell a beszállítóval"
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr "Beszállítói alkatrész"
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr "Beérkezett"
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr "Érkezett tételek száma"
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr "Beszerzési ár"
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr "Beszerzési egységár"
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr "Vevői Rendelés Extra Sor"
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr "Vevői Rendelés Sortétel"
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr "Virtuális alkatrészt nem lehet vevői rendeléshez adni"
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr "Csak értékesíthető alkatrészeket lehet vevői rendeléshez adni"
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "Eladási ár"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr "Eladási egységár"
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Kiszállítva"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr "Szállított mennyiség"
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr "Vevői Rendelés Szállítása"
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr "Szállítás dátuma"
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr "Szállítási dátum"
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr "Kézbesítés dátuma"
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr "Ellenőrizte"
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr "Felhasználó aki ellenőrizte ezt a szállítmányt"
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr "Szállítmány"
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr "Szállítmány száma"
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr "Nyomkövetési szám"
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr "Szállítmány nyomkövetési információ"
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr "Számlaszám"
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr "Hozzátartozó számla referencia száma"
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr "Szállítmány már elküldve"
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr "Szállítmány nem tartalmaz foglalt készlet tételeket"
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr "Vevői Rendelés Extra Sor"
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr "Vevői rendeléshez foglalások"
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr "Készlet tétel nincs hozzárendelve"
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr "Nem foglalható készlet egy másik fajta alkatrész sortételéhez"
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr "Nem foglalható készlet egy olyan sorhoz amiben nincs alkatrész"
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr "A lefoglalandó mennyiség nem haladhatja meg a készlet mennyiségét"
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr "Egyedi követésre kötelezett tételeknél a menyiség 1 kell legyen"
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr "Vevői rendelés nem egyezik a szállítmánnyal"
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr "Szállítmány nem egyezik a vevői rendeléssel"
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr "Sor"
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr "Vevői rendelés szállítmány azonosító"
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr "Tétel"
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr "Válaszd ki a foglalásra szánt készlet tételt"
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr "Készlet foglalási mennyiség megadása"
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr "Visszavétel azonosító"
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr "Cég akitől a tételek visszavételre kerülnek"
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr "Visszavétel állapota"
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr "Visszavétel sortétel"
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr "Válaszd ki a vevőtől visszavenni kívánt tételt"
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr "Visszavétel dátuma"
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr "Mikor lett visszavéve a tétel"
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr "Kimenetel"
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr "Sortétel végső kimenetele"
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr "Sortétel visszaküldésének vagy javításának költsége"
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr "Visszavétel extra tétel"
 
@@ -4708,7 +4751,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4752,7 +4795,7 @@ msgstr "Elemek összevonása"
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr "Azonos forrás és cél dátumú Alkatrész tételeinek összevonása egy tételre"
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr "SKU (leltári azonosító)"
 
@@ -4788,7 +4831,7 @@ msgstr "Sortétel"
 msgid "Line item does not match purchase order"
 msgstr "Sortétel nem egyezik a beszerzési megrendeléssel"
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr "Válassz cél helyet a beérkezett tételeknek"
 
@@ -4812,7 +4855,7 @@ msgstr "Írd be a sorozatszámokat a beérkezett tételekhez"
 msgid "Override packaging information for incoming stock items"
 msgstr "Bejövő készlettételek csomagolási információjának felülbírálata"
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr "Kiegészítő megjegyzés beérkező készlettételekhez"
 
@@ -4832,7 +4875,7 @@ msgstr "Ez a vonalkód már használva van"
 msgid "An integer quantity must be provided for trackable parts"
 msgstr "Egész számú mennyiség szükséges az egyedi követésre kötelezett alkatrészeknél"
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr "Sortételt meg kell adni"
 
@@ -4892,32 +4935,32 @@ msgstr "Nincs találat a következő sorozatszámokra"
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr "Visszavétel sortétel"
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr "Készlet tétel státusz kódja"
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr "Sortétel nem egyezik a visszavétellel"
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr "A sortétel már beérkezett"
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr "Csak folyamatban lévő megrendelés tételeit lehet bevételezni"
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr "Sortétel pénzneme"
 
@@ -4971,107 +5014,103 @@ msgstr "Késésben lévő vevői rendelés"
 msgid "Sales order {so} is now overdue"
 msgstr "A {so} vevői rendelés most már késésben van"
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr "Csillagozott"
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr "Csillagozottra szűrés"
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr "Mélység"
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr "Kategória mélységre szűrés"
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr "Felső szint"
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr "Csúcs készlethelyre szűrés"
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr "Lépcsőzetes"
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr "Szűrt eredmények tartalmazzák az alkategóriákat"
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr "Szülő"
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr "Szülő kategóriára szűrés"
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr "Fa kihagyása"
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr "Az adott kategória alkategóriáinak kihagyása"
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr "Van találat"
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr "Beérkező beszerzési rendelés"
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr "Kimenő vevői rendelés"
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr "Gyártással előállított készlet"
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr "A gyártási utasításhoz szükséges készlet"
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr "Teljes alkatrészjegyzék jóváhagyása"
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr "Ennek az opciónak ki kll lennie választva"
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr "Változat"
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr "Vannak Változatok"
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr "Alkatrészjegyzék ellenőrizve"
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr "Összeállított Alkatrész ellenőrizhető"
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr "Összetevő alkatrész ellenőrizhető"
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr "Használ"
 
@@ -5121,7 +5160,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr "Nem lehet az alkatrészkategóriát szerkezeti kategóriává tenni, mert már vannak itt alkatrészek!"
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "Alkatrészek"
 
@@ -5236,7 +5275,7 @@ msgstr "Alkatrész kulcsszavak amik segítik a megjelenést a keresési eredmén
 msgid "Part category"
 msgstr "Alkatrész kategória"
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr "IPN (Belső Cikkszám)"
@@ -5245,7 +5284,7 @@ msgstr "IPN (Belső Cikkszám)"
 msgid "Part revision or version number"
 msgstr "Alkatrész változat vagy verziószám (pl. szín, hossz, revízió, stb.)"
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr "Változat"
 
@@ -5277,7 +5316,7 @@ msgstr "Alapértelmezett lejárat"
 msgid "Expiry time (in days) for stock items of this part"
 msgstr "Lejárati idő (napban) ennek az alkatrésznek a készleteire"
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr "Minimális készlet"
 
@@ -5614,7 +5653,7 @@ msgstr "Teszt leírása"
 msgid "Enter description for this test"
 msgstr "Adj hozzá egy leírást ehhez a teszthez"
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "Engedélyezve"
 
@@ -5898,309 +5937,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr "Ennyi alkatrész használja ezt a sablont"
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr "Nincs kiválasztva alkatrész"
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr "Válassz kategóriát"
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr "Eredeti alkatrész"
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr "Válassz eredeti alkatrészt a másoláshoz"
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr "Kép másolása"
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr "Kép másolása az eredeti alkatrészről"
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr "Alkatrészjegyzék másolása"
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr "Alkatrészjegyzék másolása az eredeti alkatrészről"
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr "Paraméterek másolása"
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr "Paraméterek másolása az eredeti alkatrészről"
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr "Megjegyzések másolása"
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr "Megjegyzések másolása az eredeti alkatrészről"
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr "Kezdeti készlet mennyiség"
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr "Add meg a kezdeti készlet mennyiséget. Ha nulla akkor nem lesz készlet létrehozva."
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr "Kezdeti készlet hely"
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr "Add meg a kezdeti készlet helyét"
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr "Válassz beszállítót (hagyd üresen ha nem kell létrehozni)"
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr "Válassz gyártót (hagyd üresen ha nem kell létrehozni)"
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr "Gyártói cikkszám"
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr "A kiválasztott cég nem érvényes beszállító"
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr "A kiválasztott cég nem érvényes gyártó"
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr "Van már ilyen gyártói alkatrész"
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr "Van már ilyen beszállítói alkatrész"
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr "Kategória neve"
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr "Gyártásban"
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr "Készlet tételek"
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr "Verziók"
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "Beszállítók"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr "Teljes készlet"
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr "Nem lefoglalt készlet"
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr "Variánsok Raktárkészlet"
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr "Alkatrész másolása"
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr "Kezdeti adatok másolása egy másik alkatrészről"
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr "Kezdeti készlet"
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr "Kezdeti készlet mennyiség létrehozása"
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr "Beszállító információ"
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr "Kezdeti beszállító adatok hozzáadása"
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr "Kategória paraméterek másolása"
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr "Paraméter sablonok másolása a kiválasztott alkatrész kategóriából"
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr "Meglévő kép"
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr "A meglévő alkatrész képfájl neve"
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr "A képfájl nem létezik"
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr "Leltár riport korlátozása bizonyos alkatrészre és variánsra"
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr "Leltár riport korlátozása bizonyos alkatrész kategóriára és az alatta lévőkre"
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr "Leltár riport korlátozása bizonyos készlethelyre és az alatta lévőkre"
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr "Külső készlet nélkül"
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr "Külső helyeken lévő készlet nélkül"
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr "Riport létrehozása"
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr "Riport fájl létrehozása a számított leltár adatokkal"
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr "Alaktrészek frissítése"
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr "Megadott alkatrészek frissítése a számított leltár adatokkal"
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr "Leltár funkció nincs engedélyezve"
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Háttér folyamat ellenőrzés sikertelen"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr "Minimum ár"
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr "Számított minimum ár felülbírálása"
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr "Minimum ár pénzneme"
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr "Maximum ár"
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr "Számított maximum ár felülbírálása"
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr "Maximum ár pénzneme"
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr "Frissítés"
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr "Alkatrész árak frissítése"
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr "Megadott pénznem átváltása {default_currency}-re sikertelen"
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr "A Minimum ár nem lehet nagyobb mint a Maximum ár"
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr "A Maximum ár nem lehet kisebb mint a Minimum ár"
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr "Szülő összeállítás kiválasztása"
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr "Összetevő alkatrész kijelölése"
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr "Gyártható"
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr "Válassz alkatrészt ahonnan az alkatrészjegyzéket másoljuk"
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr "Létező adat törlése"
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr "Meglévő alkatrészjegyzék tételek törlése a másolás előtt"
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr "Örököltekkel együtt"
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr "Sablon alkatrészektől örökölt alkatrészjegyzék tételek használata"
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr "Hibás sorok kihagyása"
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr "Engedély a hibás sorok kihagyására"
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr "Helyettesítő alkatrészek másolása"
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr "Helyettesítő alkatrészek másolása az alkatrészjegyzék tételek másolásakor"
 
@@ -6337,28 +6368,28 @@ msgstr "Készlet tétel lefoglalva egy vevői rendeléshez"
 msgid "Not enough information"
 msgstr "Nincs elég információ"
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr "A tétel bevételezéséhez további információ szükséges"
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr "Beszerzési rendelés tétele bevételezve"
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6438,15 +6469,15 @@ msgstr "Lefoglalandó mennyiség"
 msgid "Label printing failed"
 msgstr "Címkenyomtatás sikertelen"
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr "A címke PDF nyomtatása sikertelen"
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr "A címke HTML nyomtatása sikertelen"
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr "Nincs elem a nyomtatáshoz"
 
@@ -6495,11 +6526,13 @@ msgid "Provides native support for barcodes"
 msgstr "Alapvető vonalkód támogatást ad"
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6529,6 +6562,112 @@ msgstr "Rövid Vonalkód Előtag"
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr "A rövid vonalkódok előtagjának beállítása hasznos lehet, ha több InvenTree példányt is használnak egy környezetben"
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr "InvenTree értesítések"
@@ -6575,21 +6714,21 @@ msgstr "InvenTree Pénzváltó"
 msgid "Default currency exchange integration"
 msgstr "Alapértelmezett pénzváltó integráció"
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr "InvenTree PDF címkenyomtató"
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr "PDF címkék nyomtatásához beépített támogatás"
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr "Debug mód"
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr "Debug mód engedélyezése - nyers HTML-t ad vissza PDF helyett"
 
@@ -6609,47 +6748,47 @@ msgstr "utoljára használva"
 msgid "Options"
 msgstr "Opciók"
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr "Címke oldal méret"
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr "Címkék kihagyása"
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr "Hagyjon ki ennyi számú címkét a címke ívek nyomtatásakor"
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr "Szegély"
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr "Az egyes címkék körüli margó"
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr "Fekvő"
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr "Fekvő módban nyomtatás"
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr "Inventree Címke Ív Nyomtató"
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr "Több címke egy ívre helyezése"
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr "Címke túl nagy a lapmérethez képest"
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr "Nem készült címke"
 
@@ -6794,7 +6933,7 @@ msgstr "Beépített plugin"
 msgid "Package Plugin"
 msgstr "Csomag plugin"
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr "Bővítmény"
 
@@ -6802,21 +6941,21 @@ msgstr "Bővítmény"
 msgid "Method"
 msgstr "Módszer"
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr "Nincs szerző"
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr "A '{p}' plugin nem kompatibilis az aktuális applikáció verzióval {v}"
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr "A pluginhoz minimum {v} verzió kell"
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr "A pluginhoz maximum {v} verzió kell"
@@ -7013,28 +7152,27 @@ msgstr "Konfiguráció törlése"
 msgid "Delete the plugin configuration from the database"
 msgstr "Plugin konfiguráció törlése az adatbázisból"
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr "Tételek"
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr "Plugin nem található"
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr "Plugin nem aktív"
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr "Plugin nem támogatja a címkenyomtatást"
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr "Érvénytelen címke méretek"
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr "Nincs érvényes tétel megadva a sablonhoz"
 
@@ -7054,172 +7192,136 @@ msgstr "Jogi információk"
 msgid "Letter"
 msgstr "„Letter” méret"
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr "Ilyen nevű Sablon fájl már létezik"
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr "Sablon neve"
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr "Sablon leírása"
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr "Verziószám (automatikusan nő)"
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr "Fájlnév minta"
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr "Minta a fájlnevek előállításához"
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr "Sablon engedélyezve"
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr "A sablon által célzott model típus"
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "Szűrők"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr "Sablon lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok)"
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr "Sablon file"
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr "Lapméret a PDF riportokhoz"
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr "Jelentés fekvő nézetben"
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "Szélesség [mm]"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr "Címke szélessége, mm-ben"
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "Magasság [mm]"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr "Címke magassága, mm-ben"
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr "Feldolgozandó elemek száma"
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr "Jelentés készítés befejezve"
-
-#: report/models.py:692
-msgid "Progress"
-msgstr "Haladás"
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr "Jelentés készítés állapota"
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr "Jelentéssablon"
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr "Kimeneti Fájl"
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr "Generált kimeneti állomány"
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr "Címke előállító plugin"
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr "Címke sablon"
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr "Részlet"
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr "Riport részlet fájl"
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr "Részlet fájl leírása"
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr "Eszköz"
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr "Riport asset fájl"
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr "Asset fájl leírása"
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr "Riport sablon kiválasztása"
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr "A jelentésben levő tételek azonosítója"
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr "Címke sablon választás"
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr "Nyomtató plugin"
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr "Címkenyomtató plugin kiválasztása"
 
@@ -7371,103 +7473,103 @@ msgstr "Szülő hely"
 msgid "Filter by parent location"
 msgstr "Szülő helyre szűrés"
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr "Státuszkód"
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr "Külső hely"
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr "Alkatrész fa"
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr "Lejárat előtt"
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr "Lejárat után"
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr "Állott"
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr "Mennyiség megadása kötelező"
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr "Egy érvényes alkatrészt meg kell adni"
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr "A megadott beszállítói alkatrész nem létezik"
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr "A beszállítói alkatrészhez van megadva csomagolási mennyiség, de a use_pack_size flag nincs beállítva"
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr "Sorozatszámot nem lehet megadni nem követésre kötelezett alkatrész esetén"
 
@@ -7503,7 +7605,7 @@ msgstr "Tulajdonos kiválasztása"
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr "A szerkezeti raktári helyekre nem lehet direktben raktározni, csak az al-helyekre."
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr "Külső"
 
@@ -8357,199 +8459,199 @@ msgstr "Vevői rendelések"
 msgid "Return Orders"
 msgstr "Visszavételek"
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr "Jogosultságok"
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "Csoport"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "Nézet"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "Jogosultság tételek megtekintéséhez"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr "Hozzáad"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "Jogosultság tételek hozzáadásához"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "Módosítás"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "Jogosultság tételek szerkesztéséhez"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "Törlés"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "Jogosultság tételek törléséhez"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Felhasználónév"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Keresztnév"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "A felhasználó keresztneve"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Vezetéknév"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "A felhasználó vezetékneve"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "A felhasználó e-mail címe"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "Személyzet"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr "Van-e a felhasználónak személyzeti jogosultsága"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr "Rendszergazda"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr "A felhasználó rendszergazda-e"
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "Aktív a felhasználói fiók"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "Önnek nincs joga változtatni ezen a felhasználói szerepkörön."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Csak a superuser-ek hozhatnak létre felhasználókat"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "A fiókod sikeresen létrejött."
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "Kérlek használd a jelszó visszállítás funkciót a belépéshez"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "Üdvözlet az InvenTree-ben"
 
diff --git a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po
index 7570d7b11b..656c1a0481 100644
--- a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Indonesian\n"
 "Language: id_ID\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "API endpoint tidak ditemukan"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Pengguna tidak memiliki izin untuk melihat model ini"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr ""
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Jumlah yang diberikan tidak valid"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr ""
 msgid "Provided value does not match required pattern: "
 msgstr "Nilai yang diberikan tidak sesuai dengan pola yang ditentukan: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Nomor seri kosong"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Gandakan Nomor Seri"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Tidak ada nomor seri ditemukan"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Hapus tag-tag HTML dari nilai ini"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr ""
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "Surel"
 
@@ -391,19 +403,19 @@ msgstr ""
 msgid "Invalid choice"
 msgstr "Pilihan tidak valid"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Nama"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Keterangan"
 msgid "Description (optional)"
 msgstr "Keterangan (opsional)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Direktori"
 
@@ -510,28 +522,28 @@ msgstr "Kelebihan tidak boleh melebihi 100%"
 msgid "Invalid value for overage"
 msgstr "Nilai kelebihan tidak valid"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Produksi Induk"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr "Bagian"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "Pesanan harus dibatalkan sebelum dapat dihapus"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr ""
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr ""
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr ""
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Tersedia"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Order Produksi"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Order Produksi"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Pilihan produksi induk tidak valid"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Referensi Order Produksi"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Referensi Order Produksi"
 msgid "Reference"
 msgstr "Referensi"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "Produksi induk dari produksi ini"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Pilih bagian untuk diproduksi"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Referensi Order Penjualan"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Order penjualan yang teralokasikan ke pesanan ini"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Lokasi Sumber"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Pilih dari lokasi mana stok akan diambil untuk produksi ini (kosongkan untuk mengambil stok dari mana pun)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Lokasi Tujuan"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Pilih lokasi di mana item selesai akan disimpan"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Jumlah Produksi"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Jumlah item stok yang akan dibuat"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Item selesai"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Jumlah stok item yang telah diselesaikan"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Status pembuatan"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Kode status pembuatan"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Kode Kelompok"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Kode kelompok untuk hasil produksi ini"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Tanggal Pembuatan"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Target tanggal selesai"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Target tanggal selesai produksi. Produksi akan menjadi terlambat setelah tanggal ini."
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Tanggal selesai"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "diselesaikan oleh"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Diserahkan oleh"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "Pengguna yang menyerahkan order ini"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Penanggung Jawab"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr ""
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Tautan eksternal"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Tautan menuju URL eksternal"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr ""
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr ""
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "Tidak ada hasil produksi yang ditentukan"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "Hasil produksi sudah selesai"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "Hasil produksi tidak sesuai dengan order produksi"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "Jumlah harus lebih besar daripada nol"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr "Jumlah"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "Item produksi harus menentukan hasil produksi karena bagian utama telah ditandai sebagai dapat dilacak"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr ""
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "Item stok teralokasikan terlalu banyak"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "Jumlah yang dialokasikan harus lebih dari nol"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "Jumlah harus 1 untuk stok dengan nomor seri"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr "Stok Item"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Sumber stok item"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Jumlah stok yang dialokasikan ke produksi"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Pasang ke"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Tujuan stok item"
 
@@ -1034,10 +1057,10 @@ msgstr "Masukkan nomor seri untuk hasil pesanan"
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Lokasi"
 
@@ -1053,7 +1076,7 @@ msgstr "Alokasikan nomor seri secara otomatis"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "Alokasikan item yang diperlukan dengan nomor seri yang sesuai secara otomatis"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "Nomor-nomor seri berikut sudah ada atau tidak valid"
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr "Lokasi hasil pesanan yang selesai"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Status"
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "Item tagihan material"
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr "Dibatalkan"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Selesai"
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Pengguna"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "Harga"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Aktif"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "Judul"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Tautan"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "Kesimpulan"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr ""
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "Berkas Gambar"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Lampiran"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "File tidak ditemukan"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Tautan eksternal tidak ditemukan"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Pilih file untuk dilampirkan"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Komentar"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr "Ukuran Berkas"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr "Label"
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr "Model"
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "Terbuat"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr "Respon"
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr "Barang diterima"
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr "Nama File"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr ""
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "Komponen"
 
@@ -2415,7 +2438,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Ukuran Halaman"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr ""
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Perusahaan"
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr "Kontak alamat surel"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "Kontak"
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr ""
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr ""
 
@@ -3713,7 +3736,7 @@ msgstr ""
 msgid "Select supplier"
 msgstr ""
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr "Diletakkan"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "File data"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr "Tersalin"
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr "Tidak diketahui"
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr "Jaringan Terputus"
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "Selesai"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "Total Harga"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "Pelanggan"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "Harga Jual"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Dikirim"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr ""
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "Aktif"
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr ""
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr "Harga Minimal"
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr "Harga Maksimal"
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr "Perbarui"
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr "Tidak cukup informasi"
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr "Legal"
 msgid "Letter"
 msgstr "Letter"
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "Ganti"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Nama Pengguna"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Nama Depan"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "Nama depan dari pengguna"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Nama Belakang"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "Nama belakang dari pengguna"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "Alamat surel dari pengguna"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "Staf"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr ""
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr ""
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr ""
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr ""
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "Selamat Datang di InvenTree"
 
diff --git a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po
index 9a7edc2f3a..f2ce853f41 100644
--- a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Italian\n"
 "Language: it_IT\n"
@@ -25,19 +25,31 @@ msgstr "Devi abilitare l'autenticazione a due fattori prima di fare qualsiasi al
 msgid "API endpoint not found"
 msgstr "Endpoint API non trovato"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr "Lista elementi fornita non valida"
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr "Filtri forniti non validi"
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
-msgstr "Nessun elemento trovato da eliminare"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
+msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "L'utente non ha i permessi per vedere questo modello"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "Impossibile convertire {original} in {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Quantità inserita non valida"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr "Valore decimale non valido"
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "Il valore '{name}' non è nel formato del pattern"
 msgid "Provided value does not match required pattern: "
 msgstr "Il valore fornito non corrisponde al modello richiesto: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr "Impossibile serializzare più di 1000 elementi contemporaneamente"
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Numero seriale vuoto"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Seriale Duplicato"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr "Gruppo non valido: {group}"
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "L'intervallo di gruppo {group} supera la quantità consentita ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Nessun numero di serie trovato"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Il numero di numeri di serie univoci ({len(serials)}) deve corrispondere alla quantità ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Rimuovi i tag HTML da questo valore"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr "I dati contengono un contenuto in markdown proibito"
 
@@ -339,7 +351,7 @@ msgstr "Cinese (Tradizionale)"
 msgid "Log in to the app"
 msgstr "Accedi all'app"
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "Email"
 
@@ -391,19 +403,19 @@ msgstr "Nomi duplicati non possono esistere sotto lo stesso genitore"
 msgid "Invalid choice"
 msgstr "Scelta non valida"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Nome"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Descrizione"
 msgid "Description (optional)"
 msgstr "Descrizione (opzionale)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Percorso"
 
@@ -510,28 +522,28 @@ msgstr "L'eccesso non deve superare il 100%"
 msgid "Invalid value for overage"
 msgstr "Valore non valido per eccedenza"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "Stato dell'ordine"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Produzione Genitore"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr "Articolo"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "Categoria"
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "La produzione deve essere annullata prima di poter essere eliminata"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "Consumabile"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Opzionale"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "Assemblaggio"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Monitorato"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr "Testabile"
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr "Ordine In Corso"
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Allocato"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Disponibile"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Ordine di Produzione"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Ordini di Produzione"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr "Assembly BOM non è stato convalidato"
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr "L'ordine di generazione non può essere creato per una parte inattiva"
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr "L'ordine di compilazione non può essere creato per una parte sbloccata"
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Scelta non valida per la produzione genitore"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "L'utente o il gruppo responsabile deve essere specificato"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "L'ordine di costruzione della parte non può essere cambiata"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Riferimento Ordine Di Produzione"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Riferimento Ordine Di Produzione"
 msgid "Reference"
 msgstr "Riferimento"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "Breve descrizione della build (facoltativo)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "Ordine di produzione a cui questa produzione viene assegnata"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Selezionare parte da produrre"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Numero di riferimento ordine di vendita"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Ordine di vendita a cui questa produzione viene assegnata"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Posizione Di Origine"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Seleziona la posizione da cui prelevare la giacenza (lasciare vuoto per prelevare da qualsiasi posizione di magazzino)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Posizione Della Destinazione"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Seleziona il luogo in cui gli articoli completati saranno immagazzinati"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Quantità Produzione"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Numero di articoli da costruire"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Articoli completati"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Numero di articoli di magazzino che sono stati completati"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Stato Produzione"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Codice stato di produzione"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Codice Lotto"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Codice del lotto per questa produzione"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Data di creazione"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Data completamento obiettivo"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Data di completamento della produzione. Dopo tale data la produzione sarà in ritardo."
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Data di completamento"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "Completato da"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Rilasciato da"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "Utente che ha emesso questo ordine di costruzione"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Responsabile"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "Utente o gruppo responsabile di questo ordine di produzione"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Collegamento esterno"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Link a URL esterno"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "Priorità di produzione"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "Priorità di questo ordine di produzione"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "Codice del progetto"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "Codice del progetto per questo ordine di produzione"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr "Impossibile scaricare l'attività per completare le allocazioni di build"
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "L'ordine di produzione {build} è stato completato"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "L'ordine di produzione è stato completato"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr "Deve essere fornita un numero di serie per gli articoli rintracciabili"
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "Nessun output di produzione specificato"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "La produzione è stata completata"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "L'output della produzione non corrisponde all'ordine di compilazione"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "La quantità deve essere maggiore di zero"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "La quantità non può essere maggiore della quantità in uscita"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "L'output della build {serial} non ha superato tutti i test richiesti"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr "Elemento di Riga Ordine di Produzione"
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "Crea oggetto"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "Crea oggetto"
 msgid "Quantity"
 msgstr "Quantità"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "Quantità richiesta per l'ordine di costruzione"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "L'elemento di compilazione deve specificare un output poiché la parte principale è contrassegnata come rintracciabile"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "La quantità assegnata ({q}) non deve essere maggiore della quantità disponibile ({a})"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "L'articolo in giacenza è sovrallocato"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "La quantità di assegnazione deve essere maggiore di zero"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "La quantità deve essere 1 per lo stock serializzato"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "L'articolo in stock selezionato non corrisponde alla voce nella BOM"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "L'articolo in stock selezionato non corrisponde alla voce nella BOM"
 msgid "Stock Item"
 msgstr "Articoli in magazzino"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Origine giacenza articolo"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Quantità di magazzino da assegnare per la produzione"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Installa in"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Destinazione articolo in giacenza"
 
@@ -1034,10 +1057,10 @@ msgstr "Inserisci i numeri di serie per gli output di compilazione (build option
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Posizione"
 
@@ -1053,7 +1076,7 @@ msgstr "Numeri di Serie Assegnazione automatica"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "Assegna automaticamente gli articoli richiesti con i numeri di serie corrispondenti"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "I seguenti numeri di serie sono già esistenti o non sono validi"
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr "Posizione per gli output di build completati"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Stato"
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr "Articolo Fornitore"
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr "Consenti Le Varianti"
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "Distinta base (Bom)"
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr "Ordinato"
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "Disponibilità in magazzino"
 
@@ -1356,7 +1379,7 @@ msgstr "Annullato"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Completo"
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "Aggiornato"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "Orario dell'ultimo aggiornamento"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "Codice unico del progetto"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "Descrizione del progetto"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr "Tasto impostazioni"
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "Valore impostazioni"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr "Il valore specificato non è un opzione valida"
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr "Il valore deve essere un valore booleano"
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr "Il valore deve essere un intero"
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr "Il valore deve essere un numero valido"
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr "Il valore non supera i controlli di convalida"
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr "La stringa chiave deve essere univoca"
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Utente"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr "Quantità prezzo limite"
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "Prezzo"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr "Prezzo unitario in quantità specificata"
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr "Scadenza"
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr "Scadenza in cui questa notifica viene ricevuta"
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr "Nome per questa notifica"
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Attivo"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr "È questa notifica attiva"
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr "Token per l'accesso"
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "Segreto"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr "Segreto condiviso per HMAC"
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr "ID Messaggio"
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr "Identificatore unico per questo messaggio"
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr "Host da cui questo messaggio è stato ricevuto"
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr "Intestazione"
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr "Intestazione di questo messaggio"
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr "Contenuto"
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr "Contenuto di questo messaggio"
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr "Scadenza in cui questo messaggio è stato ricevuto"
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr "Lavorato il"
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr "Il lavoro su questo messaggio è terminato?"
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "Titolo"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Collegamento"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "Pubblicato"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "Autore"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "Riepilogo"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr "Letto"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr "Queste notizie sull'elemento sono state lette?"
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "Immagine"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "File immagine"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Allegato"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "File mancante"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Link esterno mancante"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Seleziona file da allegare"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Commento"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "Valore"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr "Etichetta"
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "Creato"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr "Ultimo aggiornamento"
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr "Scansione Codice A Barre"
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr "Dati"
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr "Dati del Codice a Barre"
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr "Utente che ha scannerizzato il codice a barre"
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr "Data e ora della scansione del codice a barre"
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr "Endpoint URL che ha elaborato il codice a barre"
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr "Contesto"
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr "Dati contestuali per la scansione del codice a barre"
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr "Risposta"
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr "Dati di risposta dalla scansione del codice a barre"
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr "Risultato"
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr "La scansione del codice a barre è riuscita?"
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr "Elemento ricevuto"
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr "Nome del file"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr "Copia Template Parametri Categoria"
 msgid "Copy category parameter templates when creating a part"
 msgstr "Copia i modelli dei parametri categoria quando si crea un articolo"
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "Modello"
@@ -2398,8 +2421,8 @@ msgstr "Gli articoli sono modelli per impostazione predefinita"
 msgid "Parts can be assembled from other components by default"
 msgstr "Gli articoli possono essere assemblate da altri componenti per impostazione predefinita"
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "Componente"
 
@@ -2415,7 +2438,7 @@ msgstr "Acquistabile"
 msgid "Parts are purchaseable by default"
 msgstr "Gli articoli sono acquistabili per impostazione predefinita"
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr "Vendibile"
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Dimensioni pagina"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "Produttore"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Azienda"
 
@@ -3497,8 +3520,8 @@ msgstr "Numero di telefono di contatto"
 msgid "Contact email address"
 msgstr "Indirizzo email"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "Contatto"
 
@@ -3542,7 +3565,7 @@ msgstr "Questa azienda produce articoli?"
 msgid "Default currency used for this company"
 msgstr "Valuta predefinita utilizzata per questa azienda"
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "Indirizzo"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr "Seleziona Produttore"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr "Codice articolo produttore (MPN)"
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr "L'articolo del costruttore collegato deve riferirsi alla stesso articolo"
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "Fornitore"
 
@@ -3713,7 +3736,7 @@ msgstr "Fornitore"
 msgid "Select supplier"
 msgstr "Seleziona fornitore"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr "Unità di giacenza magazzino fornitore"
 
@@ -3733,7 +3756,7 @@ msgstr "URL dell'articolo del fornitore"
 msgid "Supplier part description"
 msgstr "Descrizione articolo fornitore"
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr "Valuta predefinita utilizzata per questo fornitore"
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr "In magazzino"
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr "Inviato"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "File dati"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr "Valido"
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr "Sconosciuto"
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr "Riferimento ordine"
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr "Creato Da"
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr "Ordine"
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr "Articolo interno"
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "Completato"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr "Ha Spedizione"
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr "Ordine D'Acquisto"
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr "Ordine D'Acquisto"
 msgid "Sales Order"
 msgstr "Ordini di Vendita"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr "Restituisci ordine"
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "Prezzo Totale"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr "Prezzo totale dell'ordine"
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr "Il contatto non corrisponde all'azienda selezionata"
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr "Descrizione dell'ordine (opzionale)"
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr "Seleziona il codice del progetto per questo ordine"
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr "Collegamento a un sito web esterno"
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "Data scadenza"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr "Data prevista per la consegna dell'ordine. L'ordine scadrà dopo questa data."
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr "Utente o gruppo responsabile di questo ordine"
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr "Punto di contatto per questo ordine"
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr "Riferimento ordine"
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr "Stato ordine d'acquisto"
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr "Azienda da cui sono stati ordinati gli articoli"
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr "Riferimento fornitore"
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr "Codice di riferimento ordine fornitore"
-
-#: order/models.py:584
-msgid "received by"
-msgstr "ricevuto da"
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr "Data di emissione"
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr "Data di emissione ordine"
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr "Utente o gruppo responsabile di questo ordine"
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr "Punto di contatto per questo ordine"
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr "Riferimento ordine"
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr "Stato ordine d'acquisto"
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr "Azienda da cui sono stati ordinati gli articoli"
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr "Riferimento fornitore"
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr "Codice di riferimento ordine fornitore"
+
+#: order/models.py:546
+msgid "received by"
+msgstr "ricevuto da"
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr "Data ordine completato"
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "Destinazione"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr "Destinazione per gli elementi ricevuti"
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr "Il fornitore dell'articolo deve corrispondere al fornitore dell'ordine di produzione"
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr "La quantità deve essere un numero positivo"
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "Cliente"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr "Azienda da cui sono stati ordinati gli elementi"
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr "Riferimento Cliente "
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr "Codice di riferimento Ordine del Cliente"
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr "Data di spedizione"
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr "spedito da"
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr "Solo un ordine aperto può essere contrassegnato come completo"
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr "L'ordine non può essere completato in quanto ci sono spedizioni incomplete"
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr "L'ordine non può essere completato perché ci sono allocazioni incomplete"
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr "L'ordine non può essere completato perché ci sono elementi di riga incompleti"
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr "Quantità Elementi"
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr "Riferimento Linea Elemento"
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr "Note linea elemento"
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr "Data di destinazione per questa voce di riga (lasciare vuoto per utilizzare la data di destinazione dall'ordine)"
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr "Contesto aggiuntivo per questa voce"
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr "Prezzo unitario"
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr "L'articolo del fornitore deve corrispondere al fornitore"
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr "Articolo Fornitore"
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr "Ricevuto"
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr "Numero di elementi ricevuti"
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr "Prezzo di Acquisto"
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr "Prezzo di acquisto unitario"
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr "Un articolo virtuale non può essere assegnato ad un ordine di vendita"
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr "Solo gli articoli vendibili possono essere assegnati a un ordine di vendita"
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "Prezzo di Vendita"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr "Prezzo unitario di vendita"
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Spedito"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr "Quantità spedita"
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr "Data di spedizione"
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr "Verificato Da"
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr "Utente che ha controllato questa spedizione"
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr "Spedizione"
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr "Numero di spedizione"
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr "Numero di monitoraggio"
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr "Informazioni di monitoraggio della spedizione"
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr "Numero Fattura"
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr "Numero di riferimento per la fattura associata"
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr "La spedizione è già stata spedita"
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr "La spedizione non ha articoli di stock assegnati"
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr "L'elemento di magazzino non è stato assegnato"
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr "Impossibile allocare l'elemento stock a una linea con un articolo diverso"
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr "Impossibile allocare stock a una riga senza un articolo"
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr "La quantità di ripartizione non puo' superare la disponibilità della giacenza"
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr "La quantità deve essere 1 per l'elemento serializzato"
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr "L'ordine di vendita non corrisponde alla spedizione"
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr "La spedizione non corrisponde all'ordine di vendita"
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr "Linea"
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr "Riferimento della spedizione ordine di vendita"
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr "Elemento"
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr "Seleziona elemento stock da allocare"
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr "Inserisci la quantità assegnata alla giacenza"
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr "Seleziona l'elemento da restituire dal cliente"
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr "Data di ricezione"
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr "Risultati"
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr "Duplica Ordine"
 msgid "Specify options for duplicating this order"
 msgstr "Specifica le opzioni per duplicare questo ordine"
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr "ID dell'ordine non corretto"
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr "Elemento Riga"
 msgid "Line item does not match purchase order"
 msgstr "L'elemento di riga non corrisponde all'ordine di acquisto"
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr "Seleziona la posizione di destinazione per gli elementi ricevuti"
 
@@ -4811,7 +4854,7 @@ msgstr "Inserisci i numeri di serie per gli articoli stock in arrivo"
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr "Il codice a barre è già in uso"
 msgid "An integer quantity must be provided for trackable parts"
 msgstr "Deve essere fornita una quantità intera per gli articoli rintracciabili"
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr "Gli elementi di linea devono essere forniti"
 
@@ -4891,32 +4934,32 @@ msgstr "Nessuna corrispondenza trovata per i seguenti numeri di serie"
 msgid "The following serial numbers are unavailable"
 msgstr "I seguenti numeri di serie non sono disponibili"
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr "Ordini Di Vendita in ritardo"
 msgid "Sales order {so} is now overdue"
 msgstr "L'ordine di vendita {so} è ora in ritardo"
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr "Ordine D'Acquisto In Arrivo"
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr "Ordine di Vendita in Uscita"
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr "Giacenza prodotta dall'Ordine di Costruzione"
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr "Giacenza richiesta per l'Ordine di Produzione"
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr "Convalida l'intera Fattura dei Materiali"
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr "Questa opzione deve essere selezionata"
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr "Non puoi rendere principale questa categoria di articoli perché alcuni articoli sono già assegnati!"
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "Articoli"
 
@@ -5235,7 +5274,7 @@ msgstr "Parole chiave per migliorare la visibilità nei risultati di ricerca"
 msgid "Part category"
 msgstr "Categoria articolo"
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr "IPN - Numero di riferimento interno"
@@ -5244,7 +5283,7 @@ msgstr "IPN - Numero di riferimento interno"
 msgid "Part revision or version number"
 msgstr "Numero di revisione o di versione"
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr "Revisione"
 
@@ -5276,7 +5315,7 @@ msgstr "Scadenza Predefinita"
 msgid "Expiry time (in days) for stock items of this part"
 msgstr "Scadenza (in giorni) per gli articoli in giacenza di questo pezzo"
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr "Scorta Minima"
 
@@ -5613,7 +5652,7 @@ msgstr "Descrizione Di Prova"
 msgid "Enter description for this test"
 msgstr "Inserisci descrizione per questa prova"
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "Abilitato"
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr "Articolo Originale"
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr "Seleziona l'articolo originale da duplicare"
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr "Copia immagine"
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr "Copia immagine dall'articolo originale"
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr "Copia Distinta Base"
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr "Copia fattura dei materiali dall'articolo originale"
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr "Copia parametri"
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr "Copia i dati dei parametri dall'articolo originale"
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr "Quantità iniziale"
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr "Specificare la quantità iniziale disponibile per questo Articolo. Se la quantità è zero, non viene aggiunta alcuna quantità."
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr "Ubicazione Iniziale Magazzino"
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr "Specificare l'ubicazione iniziale del magazzino per questo Articolo"
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr "Seleziona il fornitore (o lascia vuoto per saltare)"
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr "Seleziona il produttore (o lascia vuoto per saltare)"
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr "Codice articolo Produttore"
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr "L'azienda selezionata non è un fornitore valido"
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr "L'azienda selezionata non è un produttore valido"
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr "L'articolo del produttore che corrisponde a questo MPN esiste già"
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr "L'articolo del fornitore che corrisponde a questo SKU esiste già"
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr "Nome Categoria"
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr "In Costruzione"
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr "Articoli in magazzino"
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "Fornitori"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr "Giacenze Totali"
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr "Duplica articolo"
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr "Copia i dati iniziali da un altro Articolo"
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr "Stock iniziale"
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr "Crea Articolo con quantità di scorta iniziale"
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr "Informazioni Fornitore"
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr "Aggiungi le informazioni iniziali del fornitore per questo articolo"
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr "Copia Parametri Categoria"
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr "Copia i parametri dai modelli della categoria articolo selezionata"
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr "Limitare il report d'inventario ad un articolo particolare e a eventuali articoli varianti"
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr "Limita il report d'inventario ad una particolare categoria articolo, e a eventuali categorie secondarie"
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr "Limita il report d'inventario ad una particolare ubicazione di magazzino, e a eventuali ubicazioni secondarie"
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr "Genera Report"
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr "Genera file di report contenente dati di inventario calcolati"
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr "Aggiorna Articoli"
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr "Aggiorna gli articoli specificati con i dati calcolati di inventario"
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr "La funzione Inventario non è abilitata"
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Controllo in background non riuscito"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr "Prezzo Minimo"
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr "Prezzo Massimo"
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr "Aggiorna"
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr "Aggiorna i prezzi per questo articolo"
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr "Puoi produrre"
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr "Seleziona l'articolo da cui copiare la distinta base"
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr "Rimuovi Dati Esistenti"
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr "Rimuovi elementi distinta base esistenti prima di copiare"
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr "Includi Ereditato"
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr "Includi gli elementi Distinta Base ereditati da prodotti template"
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr "Salta Righe Non Valide"
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr "Abilita questa opzione per saltare le righe non valide"
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr "Copia Articoli sostitutivi"
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr "Copia articoli sostitutivi quando duplichi gli elementi distinta base"
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr "Stampa etichetta fallita"
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr "Fornisce supporto nativo per codici a barre"
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr "InvenTree Notifiche"
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr "Plugin Integrato"
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr "Metodo"
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr "Nessun autore trovato"
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr "Nome modello"
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr "Descrizione del template"
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr "Allega al Modello su Stampa"
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr "Salva l'output del report come allegato contro l'istanza del modello collegato durante la stampa"
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr "Formato del nome file"
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "Filtri"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "Larghezza [mm]"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr "Larghezza dell'etichetta, specificata in mm"
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "Altezza [mm]"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr "Larghezza dell'etichetta, specificata in mm"
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr "Report file snippet"
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr "Descrizione file snippet"
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr "Risorsa"
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr "Report file risorsa"
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr "File risorsa descrizione"
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr "Nome della parte (maiuscole e minuscole)"
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr "Il nome della parte contiene (maiuscole e minuscole)"
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr "Nome della parte (regex)"
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr "IPN della parte (maiuscole e minuscole)"
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr "IPN della parte contiene (maiuscole e minuscole)"
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr "IPN della parte (regex)"
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr "Giacenza minima"
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr "Giacenza massima"
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr "Codici di stato"
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr "Ubicazione Esterna"
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr "Obsoleto"
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr "La quantità è richiesta"
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr "Deve essere fornita un articolo valido"
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr "I numeri di serie non possono essere forniti per un articolo non tracciabile"
 
@@ -7502,7 +7604,7 @@ msgstr "Seleziona Owner"
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr "Gli elementi di magazzino non possono essere direttamente situati in un magazzino strutturale, ma possono essere situati in ubicazioni secondarie."
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr "Esterno"
 
@@ -8356,199 +8458,199 @@ msgstr "Ordini di Vendita"
 msgid "Return Orders"
 msgstr "Ordini di reso"
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr "Impostazione autorizzazioni"
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "Gruppo"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "Visualizza"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "Autorizzazione a visualizzare gli articoli"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr "Aggiungi"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "Autorizzazione ad aggiungere elementi"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "Modificare"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "Permessi per modificare gli elementi"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "Elimina"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "Autorizzazione ad eliminare gli elementi"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Nome utente"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Nome"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "Nome dell'utente"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Cognome"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "Cognome dell'utente"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "Indirizzo email dell'utente"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "Staff"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr "Questo utente ha i permessi dello staff"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr "Superuser"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr "Questo utente è un superutente"
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "Questo account utente è attivo"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "Non hai i permessi per cambiare il ruolo dell'utente."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Solo i superutenti possono creare nuovi utenti"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "Il tuo account è stato creato."
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "Si prega di utilizzare la funzione di reimpostazione password per accedere"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "Benvenuto in InvenTree"
 
diff --git a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po
index be51e204ae..931c447afe 100644
--- a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Japanese\n"
 "Language: ja_JP\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "APIエンドポイントが見つかりません"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr "無効なアイテムリスト"
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr "提供されたフィルタが無効"
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
-msgstr "削除する項目が見つかりません"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
+msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "ユーザーにこのモデルを表示する権限がありません"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "{original}を{unit}に変換できませんでした。"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "数量コードが無効です"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr "無効な10進数値"
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "値 '{name}' はパターン形式で表示されません"
 msgid "Provided value does not match required pattern: "
 msgstr "指定された値が必要なパターンと一致しません: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr "一度に1000以上のアイテムをシリアライズすることはできません。"
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "シリアル番号は空です"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "重複シリアル"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr "無効なグループです:{group}"
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "グループ範囲 {group} が許容数量を超過 ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "シリアル番号が見つかりません"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "一意のシリアル番号の数({len(serials)})は数量({expected_quantity})と一致する必要があります。"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "この値からHTMLタグを削除"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr "データに禁止されているマークダウン・コンテンツが含まれています。"
 
@@ -339,7 +351,7 @@ msgstr "中国語 (繁体字)"
 msgid "Log in to the app"
 msgstr "アプリにログイン"
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "メールアドレス"
 
@@ -391,19 +403,19 @@ msgstr "同じ親に重複した名前は存在しません。"
 msgid "Invalid choice"
 msgstr "無効な選択です"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "お名前"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "説明"
 msgid "Description (optional)"
 msgstr "説明 (オプション)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "パス"
 
@@ -510,28 +522,28 @@ msgstr "超過分は100%を超えてはなりません"
 msgid "Invalid value for overage"
 msgstr "超過分の無効な値"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "注文ステータス"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "親ビルド"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr "バリアントを含む"
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr "バリアントを含む"
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr "バリアントを含む"
 msgid "Part"
 msgstr "パーツ"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "カテゴリ"
 
@@ -612,90 +623,102 @@ msgstr "完成前"
 msgid "Completed after"
 msgstr "終了後"
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr "ツリーを除く"
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "削除するには、ビルドをキャンセルする必要があります。"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "消耗品"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "オプション"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "アセンブリ"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "追跡"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr "テスト可能"
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr "受注残高"
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "割り当てられた"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "利用可能"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "組立注文"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "組立注文"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr "アセンブリBOMが検証されていません"
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr "非アクティブな部品にビルドオーダーを作成できません。"
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr "ロックされていない部品にビルドオーダーを作成できません。"
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "親ビルドの選択が無効"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "担当ユーザーまたはグループを指定する必要があります。"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "ビルドオーダー部品は変更できません"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "ビルド・オーダー・リファレンス"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "ビルド・オーダー・リファレンス"
 msgid "Reference"
 msgstr "参照"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "建築の簡単な説明(任意)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "このビルドが割り当てられる ビルドオーダー"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "製造する部品の選択"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "セールス・オーダー・リファレンス"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "このビルドが割り当てられる SalesOrder"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "ソース・ロケーション"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "このビルドで在庫を取得する場所を選択します(任意の在庫場所から取得する場合は空白のままにしてください)。"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "目的地"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "完成したアイテムの保管場所を選択"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "数量"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "構築するストックアイテムの数"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "完成品"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "完了した在庫アイテムの数"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "組立状況"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "ビルドステータスコード"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "バッチコード"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "このビルド出力のバッチコード"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "作成日時"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "完成目標日"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "ビルド完了目標日。この日付を過ぎると、ビルドは期限切れになります。"
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "完了日"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "完了者"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "発行者"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "このビルドオーダーを発行したユーザー"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "責任"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "このビルドオーダーを担当するユーザーまたはグループ"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "外部リンク"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "外部 サイト へのリンク"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "組立優先度"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "建設順序の優先順位"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "プロジェクトコード"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "プロジェクトコード"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr "ビルドの割り当てを完了するタスクのオフロードに失敗しました。"
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "ビルドオーダー{build}が完了しました"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "建設発注が完了しました"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr "追跡可能な部品については、シリアル番号の提示が必要です。"
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "ビルド出力が指定されていません"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "ビルド出力はすでに完了しています"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "ビルド出力がビルド順序と一致しません"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "数量はゼロより大きくなければなりません"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "数量が出力数量を上回ることはできません"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "ビルド出力 {serial} は、必要なすべてのテストに合格していません。"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr "ビルドオーダーラインアイテム"
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "ビルドオブジェクト"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "ビルドオブジェクト"
 msgid "Quantity"
 msgstr "数量"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "注文数量"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "ビルド項目は、ビルド出力を指定する必要があります。"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "割当数量({q})は在庫可能数量({a})を超えてはなりません。"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "在庫が過剰配分"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "割当数量はゼロより大きくなければなりません"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "シリアル在庫の場合、数量は1でなければなりません。"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "選択された在庫品目が部品表に一致しません。"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "選択された在庫品目が部品表に一致しません。"
 msgid "Stock Item"
 msgstr "在庫商品"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "ソース在庫品"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "建設に割り当てる在庫量"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "インストール"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "仕向け地在庫品"
 
@@ -1034,10 +1057,10 @@ msgstr "ビルド出力のためのシリアル番号の入力"
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "場所"
 
@@ -1053,7 +1076,7 @@ msgstr "シリアル番号の自動割り当て"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "シリアル番号が一致する必要なアイテムを自動的に割り当て"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "以下のシリアル番号は既に存在するか、無効です。"
@@ -1082,10 +1105,10 @@ msgstr "ビルドアウトプットを廃棄する理由"
 msgid "Location for completed build outputs"
 msgstr "完成した建造物のアウトプットの場所"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "ステータス"
 
@@ -1270,8 +1293,8 @@ msgstr "部品表 部品名"
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr "サプライヤー"
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr "バリアントを許可"
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "BOMアイテム"
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr "割当株式"
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr "注文中"
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr "生産中"
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr "外部在庫"
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "在庫状況"
 
@@ -1356,7 +1379,7 @@ msgstr "キャンセル済"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "完了"
 
@@ -1405,536 +1428,536 @@ msgstr "有効な通貨コードはありません"
 msgid "No plugin"
 msgstr "プラグインなし"
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "更新しました"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "最終更新のタイムスタンプ"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "独自のプロジェクトコード"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "プロジェクトの説明"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr "このプロジェクトを担当するユーザーまたはグループ"
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr "設定キー"
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "設定値"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr "選択された値は有効なオプションではありません。"
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr "値はブール値でなければなりません。"
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr "値は整数値でなければなりません。"
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr "値は有効な数値でなければなりません。"
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr "値がバリデーション・チェックに合格しない"
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr "キー文字列は一意でなければなりません。"
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "ユーザー"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr "価格破壊数量"
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "価格"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr "指定数量での単価"
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr "エンドポイント"
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr "このウェブフックを受信するエンドポイント"
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr "このウェブフックの名前"
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "有効"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr "このウェブフックはアクティブですか"
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr "トークン"
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr "アクセス用トークン"
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "シークレット"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr "HMACの共有秘密"
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr "メッセージ ID:"
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr "このメッセージの一意な識別子"
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr "ホスト"
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr "このメッセージを受信したホスト"
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr "ヘッダー"
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr "このメッセージのヘッダー"
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr "本文"
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr "メッセージ本文"
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr "このメッセージを受信したエンドポイント"
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr "作業内容"
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr "このメッセージに関する作業は終わったのですか?"
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr "Id"
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "タイトル"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "リンク"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "公開済み"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "投稿者"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "概要"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr "既読"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr "このニュースは読まれましたか?"
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "画像"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "画像ファイル"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr "この画像の対象モデルタイプ"
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr "この画像の対象モデルID"
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr "カスタムユニット"
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr "単位記号は一意でなければなりません。"
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr "ユニット名は有効な識別子でなければなりません。"
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr "ユニット名"
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr "シンボル"
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr "オプションの単位記号"
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr "定義"
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr "ユニットの定義"
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "添付ファイル"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "ファイルがありません"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "外部リンクが見つかりません。"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "添付ファイルを選択"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "コメント:"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr "添付コメント"
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr "アップロード日"
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr "ファイルがアップロードされた日付"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr "ファイルサイズ"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr "ファイルサイズ(バイト"
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr "添付ファイルに指定されたモデルタイプが無効です"
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr "カスタムステート"
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr "カスタムステート"
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr "リファレンス・ステータス・セット"
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr "このカスタム状態で拡張されたステータスセット"
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr "論理キー"
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr "ビジネスロジックでこのカスタムステートに等しいステート論理キー"
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "値"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr "モデルのデータベースに保存される数値"
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr "都道府県名"
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr "ラベル"
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr "フロントエンドに表示されるラベル"
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr "色"
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr "フロントエンドに表示される色"
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr "モデル"
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr "この状態が関連するモデル"
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr "モデルを選択する必要があります"
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr "キーを選択する必要があります。"
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr "論理キーを選択する必要があります。"
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr "キーは論理キーと異なる必要があります。"
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr "有効な参照ステータスクラスが提供されなければならない"
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr "キーは、参照ステータスの論理キーとは異なる必要があります。"
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr "論理キーは、参照ステータスの論理キーに含まれていなければなりません。"
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr "リファレンス・ステータスの名前とは異なっていなければならない。"
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr "セレクションリスト"
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr "セレクション・リスト"
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr "選択リストの名前"
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr "選択リストの説明"
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr "ロック中"
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr "この選択リストはロックされていますか?"
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr "このセレクションリストは使えますか?"
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr "ソースプラグイン"
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr "選択リストを提供するプラグイン"
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr "ソースストリング"
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr "このリストに使用されているソースを示すオプションの文字列"
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr "デフォルトエントリー"
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr "この選択リストのデフォルト項目"
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "作成日"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr "選択リストが作成された日時"
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr "最終更新"
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr "選択リストが最後に更新された日時"
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr "セレクションリスト入力"
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr "セレクションリスト"
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr "このエントリーが属する選択リスト"
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr "選択リストエントリーの値"
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr "選択リスト項目のラベル"
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr "選択リスト項目の説明"
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr "この選択リストはアクティブですか?"
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr "バーコードスキャン"
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr "データ"
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr "バーコードデータ"
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr "バーコードをスキャンしたユーザー"
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr "タイムスタンプ"
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr "バーコードスキャンの日時"
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr "バーコードを処理したURLエンドポイント"
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr "コンテキスト"
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr "バーコードスキャンのコンテキストデータ"
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr "返答"
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr "バーコードスキャンによるレスポンスデータ"
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr "結果"
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr "バーコードスキャンは成功しましたか?"
 
@@ -1956,7 +1979,7 @@ msgstr "{verbose_name} キャンセル"
 msgid "A order that is assigned to you was canceled"
 msgstr "あなたに割り当てられた注文がキャンセルされました。"
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr "受領品目"
 
@@ -2036,7 +2059,7 @@ msgstr "タスクキーワード引数"
 msgid "Filename"
 msgstr "ファイル名"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr "モデルタイプ"
 
@@ -2384,8 +2407,8 @@ msgstr "カテゴリー・パラメーター・テンプレートのコピー"
 msgid "Copy category parameter templates when creating a part"
 msgstr "部品作成時のカテゴリー・パラメーター・テンプレートのコピー"
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "テンプレート"
@@ -2398,8 +2421,8 @@ msgstr "パーツはデフォルトのテンプレートです"
 msgid "Parts can be assembled from other components by default"
 msgstr "パーツはデフォルトで他のコンポーネントから組み立てることができます"
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "コンポーネント"
 
@@ -2415,7 +2438,7 @@ msgstr "購入可能"
 msgid "Parts are purchaseable by default"
 msgstr "パーツはデフォルトで購入可能です"
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr "販売可能"
 
@@ -2619,8 +2642,8 @@ msgstr "ログレポートエラー"
 msgid "Log errors which occur when generating reports"
 msgstr "レポート生成時に発生するエラーのログ"
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "ページサイズ"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr "サプライヤーの活動"
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "製造元"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "会社名"
 
@@ -3497,8 +3520,8 @@ msgstr "連絡先電話番号"
 msgid "Contact email address"
 msgstr "連絡先メールアドレス"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "お問い合わせ"
 
@@ -3542,7 +3565,7 @@ msgstr "この会社は部品を製造しているのですか?"
 msgid "Default currency used for this company"
 msgstr "この会社で使用されるデフォルト通貨"
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "住所"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr "メーカー選択"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr "MPN"
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr "リンクされたメーカー部品は、同じベース部品を参照する必要があります。"
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "仕入先"
 
@@ -3713,7 +3736,7 @@ msgstr "仕入先"
 msgid "Select supplier"
 msgstr "サプライヤーを選択"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr "サプライヤー在庫管理ユニット"
 
@@ -3733,7 +3756,7 @@ msgstr "外部サプライヤー部品リンク用URL"
 msgid "Supplier part description"
 msgstr "サプライヤーの部品説明"
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr "このサプライヤーで使用されるデフォルト通貨"
 msgid "Company Name"
 msgstr "会社名"
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr "在庫あり"
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr "カスタムステータスキー"
@@ -3841,10 +3888,6 @@ msgstr "設置済"
 msgid "Invalid status code"
 msgstr "無効なステータスコード"
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr "無効なエクスポート形式"
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "データファイル"
@@ -3925,7 +3968,7 @@ msgstr "元の行データ"
 msgid "Errors"
 msgstr "エラー"
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr "有効"
 
@@ -4013,51 +4056,51 @@ msgstr "データファイルの行数が多すぎます。"
 msgid "Value must be a valid dictionary object"
 msgstr "値は有効な辞書オブジェクトでなければなりません。"
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr "コピー"
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr "各ラベルの印刷部数"
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr "接続済み"
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr "不明"
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr "印刷"
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr "メディアがありません"
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr "紙詰まり"
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr "ネットワーク接続なし"
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr "ラベルプリンター"
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr "さまざまなアイテムのラベルを直接印刷できます。"
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr "プリンタの場所"
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr "プリンターを特定の場所に設置"
 
@@ -4117,7 +4160,7 @@ msgstr "設定タイプ"
 msgid "Order Reference"
 msgstr "注文参照"
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr "並外れた"
 
@@ -4125,7 +4168,7 @@ msgstr "並外れた"
 msgid "Has Project Code"
 msgstr "プロジェクトコード"
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr "作成者"
 
@@ -4161,53 +4204,53 @@ msgstr "目標期日"
 msgid "Target Date After"
 msgstr "以降の目標日"
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr "価格"
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr "完成前"
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr "終了後"
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr "注文"
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr "注文完了"
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr "内部パーツ"
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr "注文保留"
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "完了"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr "出荷あり"
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr "注文"
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr "注文"
 msgid "Sales Order"
 msgstr "セールスオーダー"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr "リターンオーダー"
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "合計金額"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr "この注文の合計金額"
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr "注文通貨"
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr "この注文の通貨(会社のデフォルトを使用する場合は空白のままにしてください。)"
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr "連絡先が選択した会社と一致しません"
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr "ご注文内容(任意)"
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr "この注文のプロジェクトコードを選択してください。"
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr "外部ページへのリンク"
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "終了日に達したら"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr "お届け予定日この期日を過ぎますと延滞となります。"
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr "この注文を担当するユーザーまたはグループ"
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr "本注文に関する連絡先"
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr "本注文の会社住所"
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr "注文参照"
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr "発注状況"
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr "注文元の会社"
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr "サプライヤー・リファレンス"
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr "サプライヤー注文参照コード"
-
-#: order/models.py:584
-msgid "received by"
-msgstr "受信"
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr "発行日"
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr "オーダー発行日"
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr "この注文を担当するユーザーまたはグループ"
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr "本注文に関する連絡先"
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr "本注文の会社住所"
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr "注文参照"
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr "発注状況"
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr "注文元の会社"
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr "サプライヤー・リファレンス"
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr "サプライヤー注文参照コード"
+
+#: order/models.py:546
+msgid "received by"
+msgstr "受信"
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr "注文完了日"
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "目的地"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr "入荷商品のお届け先"
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr "部品サプライヤーは、POサプライヤーと一致する必要があります。"
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr "数量は正の数でなければなりません。"
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "顧客"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr "販売先"
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr "販売注文状況"
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr "お客様リファレンス"
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr "顧客注文参照コード"
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr "出荷日"
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr "出荷元"
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr "注文はすでに完了しています。"
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr "注文はすでにキャンセルされました"
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr "未完了の注文にのみ完了マークを付けることができます。"
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr "出荷に不備があるため、注文を完了できません。"
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr "割り当てに不備があるため、注文を完了できません。"
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr "不完全な項目があるため、注文を完了できません。"
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr "品目数量"
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr "行項目参照"
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr "項目"
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr "この行項目の目標期日(注文の目標期日を使用する場合は空白のままにしてください。)"
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr "行項目の説明(オプション)"
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr "この行の補足説明"
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr "単価"
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr "発注書項目"
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr "サプライヤーの部品はサプライヤーと一致しなければなりません。"
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr "サプライヤー"
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr "受信"
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr "受領品目数"
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr "購入金額"
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr "購入単価"
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr "発注書追加行"
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr "販売注文明細"
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr "仮想部品を販売注文に割り当てることはできません"
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr "販売可能な部品のみを販売オーダーに割り当てることができます。"
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "セール価格"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr "販売単価"
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "発送済み"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr "出荷数量"
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr "販売注文の出荷"
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr "出荷日"
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr "配達日"
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr "貨物の引渡日"
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr "チェック済み"
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr "この貨物をチェックしたユーザー"
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr "発送"
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr "出荷番号"
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr "追跡番号"
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr "貨物追跡情報"
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr "請求書番号"
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr "関連する請求書の参照番号"
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr "発送済み"
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr "出荷品目に割り当てられた在庫がありません"
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr "セールスオーダー追加ライン"
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr "販売注文の割り当て"
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr "在庫アイテムが割り当てられていません"
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr "在庫品を別部品のラインに割り当てることはできません。"
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr "部品のないラインに在庫を割り当てることはできません。"
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr "割当数量が在庫数量を超えることはできません"
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr "シリアル化された在庫品の場合、数量は1でなければなりません。"
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr "販売注文と出荷が一致しません"
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr "出荷が販売注文と一致しません"
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr "ライン"
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr "販売注文の出荷参照"
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr "アイテム"
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr "割り当てるストックアイテムを選択"
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr "在庫割当数量の入力"
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr "リターンオーダー参照"
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr "返品元の会社"
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr "返品状況"
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr "返品注文項目"
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr "在庫品の指定が必要です。"
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr "返品数量が在庫数量を超える場合"
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr "返品数量はゼロより大きくなければなりません。"
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr "シリアル化されたストックアイテムの数量が無効です。"
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr "お客様から返品する商品を選択"
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr "受領日"
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr "この返品商品が届いた日付"
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr "転帰"
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr "この項目の成果"
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr "この品目の返品または修理に関連する費用"
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr "リターンオーダー追加ライン"
 
@@ -4707,7 +4750,7 @@ msgstr "重複した注文"
 msgid "Specify options for duplicating this order"
 msgstr "この注文を複製するためのオプションを指定します。"
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr "無効なオーダーID"
 
@@ -4751,7 +4794,7 @@ msgstr "アイテムのマージ"
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr "同じ品目、同じ仕向け地、同じ日付の品目を1つの品目に統合します。"
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr "SKU"
 
@@ -4787,7 +4830,7 @@ msgstr "明細"
 msgid "Line item does not match purchase order"
 msgstr "品目が発注書と一致しません"
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr "受取商品の配送先選択"
 
@@ -4811,7 +4854,7 @@ msgstr "入荷した在庫品のシリアル番号の入力"
 msgid "Override packaging information for incoming stock items"
 msgstr "入荷在庫品の包装情報の上書き"
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr "在庫品の入荷に関する注意事項"
 
@@ -4831,7 +4874,7 @@ msgstr "バーコードはすでに使用されています"
 msgid "An integer quantity must be provided for trackable parts"
 msgstr "追跡可能な部品については、整数の数量を提供する必要があります。"
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr "項目は必ずご記入ください。"
 
@@ -4891,32 +4934,32 @@ msgstr "以下のシリアル番号に該当するものは見つかりません
 msgid "The following serial numbers are unavailable"
 msgstr "以下のシリアル番号はご利用いただけません。"
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr "返品注文項目"
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr "在庫商品ステータスコード"
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr "ラインアイテムが返品オーダーと一致しません"
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr "ラインアイテムはすでに受領済み"
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr "商品の受け取りは、進行中の注文に対してのみ可能です。"
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr "返品数量"
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr "ライン価格通貨"
 
@@ -4970,107 +5013,103 @@ msgstr "期限切れ販売注文"
 msgid "Sales order {so} is now overdue"
 msgstr "セールスオーダー{so}は現在期限切れです。"
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr "スター付き"
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr "星の数で絞り込む"
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr "深さ"
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr "カテゴリの深さでフィルタリング"
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr "最多メンバーレベル"
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr "トップレベルカテゴリーによるフィルタリング"
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr "カスケード表示"
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr "フィルタリング結果にサブカテゴリーを含めることができます。"
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr "親"
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr "親カテゴリーによる絞り込み"
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr "ツリーを除く"
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr "指定したカテゴリの下にあるサブカテゴリを除外します。"
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr "実績あり"
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr "発注書"
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr "販売注文"
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr "受注生産在庫"
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr "受注生産に必要な在庫"
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr "部品表全体の検証"
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr "このオプションを選択する必要があります。"
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr "改訂版"
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr "改定あり"
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr "BOM有効"
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr "組み立て部分はテスト可能"
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr "コンポーネント部分はテスト可能"
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr "用途"
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr "いくつかの部品がすでに割り当てられているため、この部品カテゴリを構造化することはできません!"
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "パーツ"
 
@@ -5235,7 +5274,7 @@ msgstr "検索結果での視認性を向上させる部分キーワード"
 msgid "Part category"
 msgstr "パーツカテゴリ"
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr "即時支払通知"
@@ -5244,7 +5283,7 @@ msgstr "即時支払通知"
 msgid "Part revision or version number"
 msgstr "部品のリビジョンまたはバージョン番号"
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr "リビジョン"
 
@@ -5276,7 +5315,7 @@ msgstr "デフォルトの有効期限"
 msgid "Expiry time (in days) for stock items of this part"
 msgstr "この部品の在庫品の有効期限(日単位"
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr "最小在庫"
 
@@ -5613,7 +5652,7 @@ msgstr "試験内容"
 msgid "Enter description for this test"
 msgstr "このテストの説明を入力してください。"
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "有効"
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr "このテンプレートを使用する部品の数"
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr "部品選択なし"
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr "カテゴリを選択"
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr "オリジナルパート"
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr "複製する元の部品を選択"
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr "コピー画像"
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr "元の部分から画像をコピー"
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr "コピーBOM"
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr "元の部品から部品表をコピー"
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr "コピーパラメータ"
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr "元の部品からパラメータデータをコピー"
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr "コピーノート"
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr "元のパートからメモをコピー"
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr "初期在庫量"
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr "この部品の初期在庫数量を指定します。数量が0の場合、在庫は追加されません。"
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr "初期在庫場所"
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr "この部品の初期在庫場所を指定してください。"
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr "サプライヤーを選択してください。"
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr "メーカーを選択してください。"
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr "メーカー品番"
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr "選択された企業は有効なサプライヤーではありません。"
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr "選択された会社は有効な製造業者ではありません。"
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr "このMPNに一致するメーカー部品はすでに存在します。"
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr "このSKUに一致するサプライヤー部品は既に存在します。"
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr "カテゴリ名"
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr "建物"
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr "在庫商品"
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr "リビジョン"
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "仕入先"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr "総在庫"
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr "未割当株式"
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr "バリアントストック"
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr "重複部分"
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr "別のパートから初期データをコピー"
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr "初期在庫"
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr "初期在庫数で部品を作成"
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr "サプライヤー情報"
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr "この部品の初期サプライヤー情報を追加します。"
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr "コピーカテゴリパラメータ"
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr "選択したパーツカテゴリーからパラメータテンプレートをコピー"
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr "既存イメージ"
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr "既存の部品画像のファイル名"
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr "画像ファイルが存在しません"
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr "ストックテイクレポートを特定の部品とバリアント部品に限定します。"
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr "ストックテイクレポートを特定の部品カテゴリーとその子カテゴリーに限定します。"
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr "ストックテイクレポートを特定のストックロケーションと子ロケーションに限定"
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr "外部在庫を除く"
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr "外部ロケーションの在庫品を除く"
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr "レポートを生成"
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr "計算されたストックテイクデータを含むレポートファイルの作成"
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr "更新部品"
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr "計算されたストックテイクデータで指定部品を更新"
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr "在庫管理機能が有効になっていません"
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "バックグラウンドワーカーのチェックに失敗しました"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr "最小価格"
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr "最低価格の計算値の上書き"
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr "最低価格通貨"
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr "最大価格"
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr "最高価格の計算値を上書き"
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr "最高価格通貨"
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr "更新"
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr "この部品の価格を更新"
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr "提供された通貨から{default_currency}に変換できませんでした。"
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr "最低価格は最高価格を超えてはなりません。"
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr "最高価格は最低価格を下回ってはなりません。"
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr "親アセンブリを選択"
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr "構成部品の選択"
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr "ビルド"
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr "BOMをコピーする部品を選択します。"
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr "既存データの削除"
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr "コピー前に既存のBOMアイテムを削除"
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr "インクルード継承"
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr "テンプレート化された部品から継承されたBOM項目を含めます。"
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr "無効な行をスキップ"
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr "無効な行をスキップするには、このオプションを有効にします。"
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr "コピー代用部品"
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr "BOMアイテムの重複時に代替部品をコピー"
 
@@ -6336,28 +6367,28 @@ msgstr "販売注文に割り当てられた在庫品目"
 msgid "Not enough information"
 msgstr "情報が不足しています"
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr "一致するアイテムが見つかりました"
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr "サプライヤーの部品が品目と一致しない"
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr "ライン・アイテムはすでに完了している"
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr "ライン・アイテムを受け取るために必要な詳細情報"
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr "受領済み発注書項目"
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr "ラインアイテムの受信に失敗"
 
@@ -6437,15 +6468,15 @@ msgstr "配分数量"
 msgid "Label printing failed"
 msgstr "ラベル印刷に失敗しました"
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr "ラベルをPDFにレンダリングする際のエラー"
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr "ラベルをHTMLにレンダリングする際のエラー"
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr "印刷する項目はありません"
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr "バーコードのネイティブサポートを提供"
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr "短いバーコードプレフィックス"
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr "複数のInvenTreeインスタンスがある環境で便利です。"
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr "InvenTree 通知"
@@ -6574,21 +6713,21 @@ msgstr "インベンツリー両替所"
 msgid "Default currency exchange integration"
 msgstr "デフォルトの為替統合"
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr "InvenTree PDFラベルプリンタ"
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr "PDFラベルの印刷をネイティブでサポート"
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr "デバッグモード"
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr "デバッグモードを有効にする - PDFの代わりに生のHTMLを返します。"
 
@@ -6608,47 +6747,47 @@ msgstr "最終使用"
 msgid "Options"
 msgstr "オプション"
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr "ラベルシートのページサイズ"
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr "ラベルをスキップ"
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr "ラベルシートの印刷時に、このラベル数をスキップします。"
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr "ボーダー"
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr "各ラベルの周囲に枠線を印刷します。"
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr "ランドスケープ"
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr "ラベルシートを横向きに印刷"
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr "InvenTree ラベルシート・プリンタ"
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr "複数のラベルを1枚のシートに配列"
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr "ラベルがページサイズに対して大きすぎる"
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr "ラベルは生成されませんでした"
 
@@ -6793,7 +6932,7 @@ msgstr "組み込みプラグイン"
 msgid "Package Plugin"
 msgstr "パッケージプラグイン"
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr "プラグイン"
 
@@ -6801,21 +6940,21 @@ msgstr "プラグイン"
 msgid "Method"
 msgstr "方法"
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr "著者は見つかりませんでした"
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr "プラグイン'{p}'は現在のInvenTreeバージョン{v}と互換性がありません。"
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr "プラグインには少なくともバージョン {v} が必要です。"
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr "プラグインに必要なバージョンは最大で{v}です。"
@@ -7012,28 +7151,27 @@ msgstr "設定の削除"
 msgid "Delete the plugin configuration from the database"
 msgstr "データベースからプラグイン設定を削除します"
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr "アイテム"
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr "プラグインが見つかりません"
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr "プラグインがアクティブではありません"
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr "プラグインはラベル印刷をサポートしていません"
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr "無効なラベル寸法"
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr "テンプレートに有効な項目がありません"
 
@@ -7053,172 +7191,136 @@ msgstr "リーガル"
 msgid "Letter"
 msgstr "文字"
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr "この名前のテンプレートファイルは既に存在します。"
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr "テンプレート名"
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr "テンプレート説明"
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr "リビジョン番号(自動インクリメント)"
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr "プリントのモデルに装着"
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr "印刷時に、リンクされたモデルインスタンスに対してレポート出力を添付ファイルとして保存"
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr "ファイル名パターン"
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr "ファイル名生成パターン"
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr "テンプレートが有効"
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr "テンプレートの対象モデルタイプ"
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "フィルター"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr "テンプレートクエリフィルタ(key=valueペアのカンマ区切りリスト)"
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr "テンプレートファイル"
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr "PDFレポートのページサイズ"
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr "レポートを横向きにレンダリング"
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "幅 [mm]"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr "ラベル幅(mm単位)"
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "高さ [mm]"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr "ラベルの高さ(mm単位)"
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr "処理項目数"
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr "レポート作成完了"
-
-#: report/models.py:692
-msgid "Progress"
-msgstr "進度"
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr "レポート作成の進捗状況"
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr "レポートテンプレート"
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr "出力ファイル"
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr "生成された出力ファイル"
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr "ラベル出力プラグイン"
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr "ラベルテンプレート"
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr "スニペット"
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr "レポートスニペットファイル"
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr "スニペットファイルの説明"
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr "資産"
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr "レポート資産ファイル"
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr "アセットファイルの説明"
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr "レポートテンプレートの選択"
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr "レポートに含める項目の主キーのリスト"
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr "ラベルテンプレートの選択"
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr "印刷プラグイン"
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr "ラベル印刷に使用するプラグインを選択します。"
 
@@ -7370,103 +7472,103 @@ msgstr "親の位置"
 msgid "Filter by parent location"
 msgstr "親の所在地でフィルタリング"
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr "部品名(大文字・小文字を区別しません)"
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr "パート名に含まれるもの(大文字・小文字を区別しません)"
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr "部品名(正規表現)"
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr "パートIPN(大文字と小文字を区別しません)"
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr "パートIPNに含まれるもの(大文字と小文字は区別されません)"
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr "パートIPN(正規表現)"
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr "最小在庫"
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr "最大在庫"
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr "ステータスコード"
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr "外部ロケーション"
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr "ビルド・オーダーで消費"
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr "その他在庫品に装着"
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr "パートツリー"
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr "更新前"
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr "更新後"
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr "ストックテイク前"
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr "ストックテイク後"
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr "有効期限"
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr "有効期限"
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr "期限失効"
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr "数量が必要です"
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr "有効な部品を供給する必要があります。"
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr "指定されたサプライヤの部品が存在しません。"
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr "サプライヤー部品にはパックサイズが定義されていますが、use_pack_sizeフラグが設定されていません。"
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr "追跡不可能な部品については、シリアル番号は提供できません。"
 
@@ -7502,7 +7604,7 @@ msgstr "所有者を選択"
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr "ストックアイテムは、構造的なストックロケーションに直接配置されることはありませんが、子ロケーションに配置されることはあります。"
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr "外部"
 
@@ -8356,199 +8458,199 @@ msgstr "セールスオーダー"
 msgid "Return Orders"
 msgstr "返品注文"
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr "パーミッション設定"
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "グループ"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "表示"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "項目を表示する権限"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr "追加"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "項目を追加する権限"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "変更"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "項目を編集する権限"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "削除"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "項目を削除する権限"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "ユーザー名"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "名"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "ユーザーの名"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "姓"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "ユーザーの姓"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "ユーザーのメールアドレス"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "スタッフ"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr "このユーザーにはスタッフ権限がありますか?"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr "スーパーユーザー"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr "このユーザーはスーパーユーザーですか?"
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "このユーザーアカウントはアクティブですか"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "このユーザのロールを変更する権限がありません"
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "新しいユーザーを作成できるのはスーパーユーザーのみです。"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "アカウントが作成されました"
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "パスワードリセット機能を使ってログインしてください"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "InvenTreeへようこそ"
 
diff --git a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po
index a0b51df84a..61ffdc029a 100644
--- a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Korean\n"
 "Language: ko_KR\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr ""
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr ""
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr ""
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr ""
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr ""
 msgid "Provided value does not match required pattern: "
 msgstr ""
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr ""
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr ""
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr ""
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr ""
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr ""
 
@@ -391,19 +403,19 @@ msgstr ""
 msgid "Invalid choice"
 msgstr ""
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr ""
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr ""
 msgid "Description (optional)"
 msgstr ""
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr ""
 
@@ -510,28 +522,28 @@ msgstr ""
 msgid "Invalid value for overage"
 msgstr ""
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr ""
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr ""
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr ""
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr ""
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr ""
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr ""
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr ""
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr ""
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr ""
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr ""
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr ""
 msgid "Reference"
 msgstr ""
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr ""
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr ""
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr ""
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr ""
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr ""
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr ""
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr ""
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr ""
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr ""
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr ""
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr ""
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr ""
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr ""
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr ""
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr ""
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr ""
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr ""
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr ""
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr ""
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr ""
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr ""
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr ""
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr ""
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr ""
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr ""
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr ""
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr ""
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr ""
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr ""
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr ""
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr ""
 
@@ -1034,10 +1057,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr ""
 
@@ -1053,7 +1076,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr ""
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr ""
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr ""
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr ""
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr ""
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr ""
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr ""
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr ""
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr ""
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr ""
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr ""
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr ""
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr ""
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr ""
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr ""
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr ""
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr ""
 
@@ -2415,7 +2438,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr ""
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr ""
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr ""
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr ""
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr ""
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr ""
 
@@ -3713,7 +3736,7 @@ msgstr ""
 msgid "Select supplier"
 msgstr ""
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr ""
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr ""
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr ""
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr ""
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr ""
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr ""
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr ""
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr ""
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr ""
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr ""
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr ""
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr ""
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr ""
 
diff --git a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po
index 06b06c1230..0867cd8b89 100644
--- a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Lithuanian\n"
 "Language: lt_LT\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr ""
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr ""
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr ""
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr ""
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr ""
 msgid "Provided value does not match required pattern: "
 msgstr ""
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr ""
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr ""
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr ""
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr ""
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr ""
 
@@ -391,19 +403,19 @@ msgstr ""
 msgid "Invalid choice"
 msgstr ""
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr ""
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr ""
 msgid "Description (optional)"
 msgstr ""
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr ""
 
@@ -510,28 +522,28 @@ msgstr ""
 msgid "Invalid value for overage"
 msgstr ""
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr ""
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr ""
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr ""
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr ""
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr ""
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr ""
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr ""
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr ""
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr ""
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr ""
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr ""
 msgid "Reference"
 msgstr ""
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr ""
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr ""
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr ""
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr ""
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr ""
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr ""
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr ""
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr ""
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr ""
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr ""
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr ""
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr ""
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr ""
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr ""
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr ""
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr ""
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr ""
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr ""
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr ""
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr ""
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr ""
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr ""
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr ""
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr ""
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr ""
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr ""
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr ""
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr ""
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr ""
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr ""
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr ""
 
@@ -1034,10 +1057,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr ""
 
@@ -1053,7 +1076,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr ""
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr ""
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr ""
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr ""
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr ""
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr ""
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr ""
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr ""
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr ""
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr ""
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr ""
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr ""
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr ""
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr ""
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr ""
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr ""
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr ""
 
@@ -2415,7 +2438,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr ""
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr ""
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr ""
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr ""
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr ""
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr ""
 
@@ -3713,7 +3736,7 @@ msgstr ""
 msgid "Select supplier"
 msgstr ""
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr ""
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr ""
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr ""
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr ""
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr ""
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr ""
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr ""
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr ""
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr ""
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr ""
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr ""
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr ""
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr ""
 
diff --git a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po
index 498912ca7d..0deb2bafdc 100644
--- a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Latvian\n"
 "Language: lv_LV\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "API galapunkts nav atrasts"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Lietotājam nav atļaujas, lai apskatītu šo modeli"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "Nevarēja konvertēt {original} par {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Norādītais daudzums nav derīgs"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "Vērtība '{name}' neparādās vajadzīgajā formātā"
 msgid "Provided value does not match required pattern: "
 msgstr "Norādītā vērtība neatbilst nepieciešamajam formātam: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Tukša sērijas numura rinda"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Atkārtojas sērijas numurs"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "Grupas diapazons {group} pārsniedz pieļaujamo daudzumu ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Netika atrasts neviens sērijas numurs"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Unikālo sērijas numuru skaitam ({len(serials)}) jāatbilst daudzumam ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Noņemiet HTML tagus no šīs vērtības"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr ""
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr ""
 
@@ -391,19 +403,19 @@ msgstr ""
 msgid "Invalid choice"
 msgstr ""
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr ""
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr ""
 msgid "Description (optional)"
 msgstr ""
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr ""
 
@@ -510,28 +522,28 @@ msgstr ""
 msgid "Invalid value for overage"
 msgstr ""
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr ""
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr ""
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr ""
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr ""
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr ""
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr ""
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr ""
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr ""
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr ""
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr ""
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr ""
 msgid "Reference"
 msgstr ""
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr ""
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr ""
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr ""
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr ""
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr ""
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr ""
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr ""
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr ""
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr ""
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr ""
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr ""
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr ""
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr ""
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr ""
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr ""
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr ""
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr ""
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr ""
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr ""
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr ""
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr ""
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr ""
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr ""
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr ""
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr ""
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr ""
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr ""
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr ""
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr ""
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr ""
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr ""
 
@@ -1034,10 +1057,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr ""
 
@@ -1053,7 +1076,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr ""
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr ""
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr ""
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr ""
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr ""
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr ""
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr ""
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr ""
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr ""
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr ""
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr ""
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr ""
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr ""
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr ""
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr ""
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr ""
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr ""
 
@@ -2415,7 +2438,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr ""
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr ""
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr ""
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr ""
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr ""
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr ""
 
@@ -3713,7 +3736,7 @@ msgstr ""
 msgid "Select supplier"
 msgstr ""
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr ""
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr ""
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr ""
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr ""
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr ""
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr ""
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr ""
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr ""
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr ""
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr ""
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr ""
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr ""
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr ""
 
diff --git a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po
index d3e94942f1..80e6c088ca 100644
--- a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Dutch\n"
 "Language: nl_NL\n"
@@ -25,19 +25,31 @@ msgstr "Schakel tweestapsverificatie in voordat je iets anders kunt doen."
 msgid "API endpoint not found"
 msgstr "API eindpunt niet gevonden"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr "Lijst met items of filters moet worden opgegeven voor bulk bewerking"
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr "Items moeten worden opgegeven als een lijst"
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr "Ongeldige items lijst verstrekt"
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr "Filters moeten als woordenboek worden opgegeven"
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr "Ongeldige filters opgegeven"
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
-msgstr "Geen items gevonden om te verwijderen"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
+msgstr "Geen items die overeenkomen met de opgegeven criteria"
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Gebruiker heeft geen rechten om dit model te bekijken"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "{original} kon niet worden omgezet naar {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Ongeldige hoeveelheid ingevoerd"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr "Ongeldige decimale waarde"
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "Waarde '{name}' verschijnt niet in patroonformaat"
 msgid "Provided value does not match required pattern: "
 msgstr "Opgegeven waarde komt niet overeen met vereist patroon: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr "Kan niet meer dan 1000 items tegelijk serienummers geven."
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Leeg serienummer"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Duplicaat serienummer"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr "Ongeldige groep: {group}"
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "Groepsbereik {group} overschrijdt toegestane hoeveelheid ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Geen serienummers gevonden"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Hoeveelheid van unieke serienummers ({s}) moet overeenkomen met de hoeveelheid ({q})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Verwijder HTML tags van deze waarde"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr "Gegevens bevatten verboden markdown inhoud"
 
@@ -339,7 +351,7 @@ msgstr "Chinees (traditioneel)"
 msgid "Log in to the app"
 msgstr "Log in op de app"
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "E-mail"
 
@@ -391,19 +403,19 @@ msgstr "Dubbele namen kunnen niet bestaan onder hetzelfde bovenliggende object"
 msgid "Invalid choice"
 msgstr "Ongeldige keuze"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Naam"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Omschrijving"
 msgid "Description (optional)"
 msgstr "Omschrijving (optioneel)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Pad"
 
@@ -510,28 +522,28 @@ msgstr "Overschot mag niet groter zijn dan 100%"
 msgid "Invalid value for overage"
 msgstr "Ongeldige waarde voor overschot"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "Status van bestelling"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Bovenliggende Productie"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr "Inclusief varianten"
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr "Inclusief varianten"
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr "Inclusief varianten"
 msgid "Part"
 msgstr "Onderdeel"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "Categorie"
 
@@ -612,90 +623,102 @@ msgstr "Voltooid voor"
 msgid "Completed after"
 msgstr "Voltooid na"
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr "Min. datum"
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr "Max. datum"
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr "Boomstructuur uitsluiten"
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "Productie moet geannuleerd worden voordat het kan worden verwijderd"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "Verbruiksartikelen"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Optioneel"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "Samenstelling"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Gevolgd"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr "Testbaar"
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr "Openstaande order"
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Toegewezen"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Beschikbaar"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Productieorder"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Productieorders"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr "Assemblage stuklijst is niet gevalideerd"
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr "Bouw bestelling kan niet worden aangemaakt voor een inactief onderdeel"
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr "Maken opdracht kan niet worden gemaakt voor een ontgrendeld onderdeel"
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Ongeldige keuze voor bovenliggende productie"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "Verantwoorde gebruiker of groep moet worden opgegeven"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "Bouworder onderdeel kan niet worden gewijzigd"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr "Doeldatum moet na startdatum zijn"
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Productieorderreferentie"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Productieorderreferentie"
 msgid "Reference"
 msgstr "Referentie"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "Korte beschrijving van de build (optioneel)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "Productieorder waar deze productie aan is toegewezen"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Selecteer onderdeel om te produceren"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Verkooporder Referentie"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Verkooporder waar deze productie aan is toegewezen"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Bronlocatie"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Selecteer de locatie waar de voorraad van de productie vandaan moet komen (laat leeg om vanaf elke standaard locatie te nemen)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Bestemmings Locatie"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Selecteer locatie waar de voltooide items zullen worden opgeslagen"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Productiehoeveelheid"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Aantal voorraaditems om te produceren"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Voltooide voorraadartikelen"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Aantal voorraadartikelen die zijn voltooid"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Productiestatus"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Productiestatuscode"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Batchcode"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Batchcode voor deze productieuitvoer"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Aanmaakdatum"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr "Bouw start datum"
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr "Geplande startdatum voor deze bestelling"
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Verwachte opleveringsdatum"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Doeldatum voor productie voltooiing. Productie zal achterstallig zijn na deze datum."
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Opleveringsdatum"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "voltooid door"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Uitgegeven door"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "Gebruiker die de productieorder heeft gegeven"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Verantwoordelijke"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "Gebruiker of groep verantwoordelijk voor deze bouwopdracht"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Externe Link"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Link naar externe URL"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "Bouw prioriteit"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "Prioriteit van deze bouwopdracht"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "Project code"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "Project code voor deze build order"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr "Verwijderen van taak om toewijzingen te voltooien mislukt"
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "Productieorder {build} is voltooid"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "Een productieorder is voltooid"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr "Serienummers moeten worden opgegeven voor traceerbare onderdelen"
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "Geen productie uitvoer opgegeven"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "Productie uitvoer is al voltooid"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "Productuitvoer komt niet overeen met de Productieorder"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "Hoeveelheid moet groter zijn dan nul"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "Hoeveelheid kan niet groter zijn dan aantal"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "Build output {serial} heeft niet alle vereiste tests doorstaan"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr "Bouw order regel item"
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "Bouw object"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "Bouw object"
 msgid "Quantity"
 msgstr "Hoeveelheid"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "Vereiste hoeveelheid voor bouwopdracht"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "Productieartikel moet een productieuitvoer specificeren, omdat het hoofdonderdeel gemarkeerd is als traceerbaar"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "Toegewezen hoeveelheid ({q}) mag de beschikbare voorraad ({a}) niet overschrijden"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "Voorraad item is te veel toegewezen"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "Toewijzing hoeveelheid moet groter zijn dan nul"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "Hoeveelheid moet 1 zijn voor geserialiseerde voorraad"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "Geselecteerde voorraadartikelen komen niet overeen met de BOM-regel"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "Geselecteerde voorraadartikelen komen niet overeen met de BOM-regel"
 msgid "Stock Item"
 msgstr "Voorraadartikel"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Bron voorraadartikel"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Voorraad hoeveelheid toe te wijzen aan productie"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Installeren in"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Bestemming voorraadartikel"
 
@@ -1034,10 +1057,10 @@ msgstr "Voer serienummers in voor productieuitvoeren"
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Locatie"
 
@@ -1053,7 +1076,7 @@ msgstr "Serienummers automatisch toewijzen"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "Vereiste artikelen automatisch toewijzen met overeenkomende serienummers"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "De volgende serienummers bestaan al of zijn ongeldig"
@@ -1082,10 +1105,10 @@ msgstr "Reden voor annulering van bouworder(s)"
 msgid "Location for completed build outputs"
 msgstr "Locatie van voltooide productieuitvoeren"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Status"
 
@@ -1270,8 +1293,8 @@ msgstr "BOM onderdeel naam"
 msgid "Build"
 msgstr "Bouwen"
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr "Leveranciersonderdeel"
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr "Varianten toestaan"
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "Stuklijstartikel"
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr "Toegewezen voorraad"
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr "In bestelling"
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr "In productie"
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr "Externe voorraad"
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "Beschikbare Voorraad"
 
@@ -1356,7 +1379,7 @@ msgstr "Geannuleerd"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Voltooid"
 
@@ -1405,536 +1428,536 @@ msgstr "Geen geldige valuta codes opgegeven"
 msgid "No plugin"
 msgstr "Geen plug-in gevonden"
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "Bijgewerkt"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "Tijdstempel van laatste update"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "Unieke projectcode"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "Projectbeschrijving"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr "Gebruiker of groep die verantwoordelijk is voor dit project"
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr "Instellingen"
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "Instellingswaarde"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr "Gekozen waarde is geen geldige optie"
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr "Waarde moet een booleaanse waarde zijn"
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr "Waarde moet een geheel getal zijn"
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr "Waarde moet een geldig getal zijn"
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr "Waarde is niet geldig voor validatiecontrole"
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr "Sleutelreeks moet uniek zijn"
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Gebruiker"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr "Prijs pauze hoeveelheid"
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "Prijs"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr "Stukprijs op opgegeven hoeveelheid"
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr "Eindpunt"
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr "Eindpunt waarop deze webhook wordt ontvangen"
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr "Naam van deze webhook"
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Actief"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr "Is deze webhook actief"
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr "Sleutel"
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr "Token voor toegang"
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "Geheim"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr "Gedeeld geheim voor HMAC"
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr "Bericht ID"
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr "Unieke identificatie voor dit bericht"
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr "Host"
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr "Host waarvan dit bericht is ontvangen"
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr "Koptekst"
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr "Koptekst van dit bericht"
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr "Berichtinhoud"
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr "Inhoud van dit bericht"
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr "Eindpunt waarop dit bericht is ontvangen"
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr "Aan gewerkt"
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr "Is het werk aan dit bericht voltooid?"
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr "Id"
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "Titel"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Koppeling"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "Gepubliceerd"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "Auteur"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "Samenvatting"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr "Gelezen"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr "Is dit nieuwsitem gelezen?"
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "Afbeelding"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "Afbeelding"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr "Doel type voor deze afbeelding"
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr "Doel modelnummer voor deze afbeelding"
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr "Aangepaste eenheid"
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr "Eenheid symbool moet uniek zijn"
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr "Naam van de unit moet een geldig id zijn"
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr "Naam van eenheid"
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr "Symbool"
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr "Optionele eenheid symbool"
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr "Definitie"
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr "Definitie van eenheid"
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Bijlage"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Ontbrekend bestand"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Externe link ontbreekt"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Bestand als bijlage selecteren"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Opmerking"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr "Opmerking van bijlage"
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr "Uploaddatum"
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr "Datum waarop het bestand is geüpload"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr "Bestandsgrootte"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr "Bestandsgrootte in bytes"
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr "Ongeldig modeltype opgegeven voor bijlage"
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr "Aangepaste staat"
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr "Aangepaste statussen"
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr "Referentie status set"
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr "Status set die met deze aangepaste status wordt uitgebreid"
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr "Logische sleutel"
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr "Staat logische sleutel die gelijk is aan deze staat in zakelijke logica"
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "Waarde"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr "De numerieke waarde die wordt opgeslagen in de modellendatabase"
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr "Naam van de toestand"
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr "Label"
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr "Label dat in de frontend getoond wordt"
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr "Kleur"
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr "Kleur die in de frontend getoond wordt"
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr "Model"
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr "Model met deze staat is gekoppeld aan"
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr "Het model moet worden gekozen"
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr "Sleutel moet worden geselecteerd"
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr "Logische sleutel moet worden geselecteerd"
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr "Sleutel moet anders zijn dan logische sleutel"
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr "Geldige referentie status klasse moet worden opgegeven"
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr "Sleutel moet verschillen van de logische sleutels van de referentie status"
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr "Logische sleutel moet in de logische sleutels van de referentiestatus staan"
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr "Naam moet anders zijn dan de namen van de referentie status"
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr "Keuzelijst"
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr "Selectielijst"
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr "Naam van de selectielijst"
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr "Beschrijving van de selectielijst"
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr "Vergrendeld"
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr "Is deze selectielijst vergrendeld?"
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr "Kan deze selectielijst worden gebruikt?"
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr "Bron plug-in"
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr "Plug-in die de selectielijst biedt"
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr "Bron tekenreeks"
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr "Optionele tekenreeks die de bron identificeert die voor deze lijst wordt gebruikt"
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr "Standaard vermelding"
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr "Standaard vermelding voor deze selectielijst"
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "Gecreëerd"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr "Datum en tijd waarop de selectielijst is aangemaakt"
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr "Laatst bijgewerkt"
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr "Datum en tijd waarop de selectielijst voor het laatst is bijgewerkt"
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr "Selectielijst item"
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr "Selectielijst item"
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr "Selectielijst waaraan dit item hoort"
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr "Naam van de selectielijst"
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr "Label voor het item in de selectielijst"
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr "Beschrijving van het item in de selectielijst"
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr "Is dit item in deze lijst actief?"
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr "Barcode Scan"
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr "Gegevens"
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr "Barcode gegevens"
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr "Gebruiker die de barcode gescand heeft"
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr "Tijdstempel"
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr "Datum en tijd van de streepjescode scan"
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr "Adres eindpunt dat de streepjescode verwerkt"
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr "Inhoud"
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr "Contextgegevens voor de barcode scan"
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr "Reactie"
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr "Reactiegegevens van de barcode scan"
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr "Resultaat"
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr "Was de barcode succesvol gescand?"
 
@@ -1956,7 +1979,7 @@ msgstr "{verbose_name} is geannuleerd"
 msgid "A order that is assigned to you was canceled"
 msgstr "Een bestelling die aan u is toegewezen is geannuleerd"
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr "Ontvangen items"
 
@@ -2036,7 +2059,7 @@ msgstr "Taak trefwoord argumenten"
 msgid "Filename"
 msgstr "Bestandsnaam"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr "Model type"
 
@@ -2384,8 +2407,8 @@ msgstr "Kopiëer Categorieparameter Sjablonen"
 msgid "Copy category parameter templates when creating a part"
 msgstr "Kopieer categorieparameter sjablonen bij het aanmaken van een onderdeel"
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "Sjabloon"
@@ -2398,8 +2421,8 @@ msgstr "Onderdelen zijn standaard sjablonen"
 msgid "Parts can be assembled from other components by default"
 msgstr "Onderdelen kunnen standaard vanuit andere componenten worden samengesteld"
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "Onderdeel"
 
@@ -2415,7 +2438,7 @@ msgstr "Koopbaar"
 msgid "Parts are purchaseable by default"
 msgstr "Onderdelen kunnen standaard gekocht worden"
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr "Verkoopbaar"
 
@@ -2619,8 +2642,8 @@ msgstr "Log fouten"
 msgid "Log errors which occur when generating reports"
 msgstr "Registreer fouten die optreden bij het genereren van rapporten"
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Paginagrootte"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr "Leverancier is actief"
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "Fabrikant"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Bedrijf"
 
@@ -3497,8 +3520,8 @@ msgstr "Telefoonnummer voor contact"
 msgid "Contact email address"
 msgstr "Contact e-mailadres"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "Contact"
 
@@ -3542,7 +3565,7 @@ msgstr "Fabriceert dit bedrijf onderdelen?"
 msgid "Default currency used for this company"
 msgstr "Standaardvaluta die gebruikt wordt voor dit bedrijf"
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "Adres"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr "Fabrikant selecteren"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr "Fabrikant artikel nummer"
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr "Gekoppeld fabrikant onderdeel moet verwijzen naar hetzelfde basis onderdeel"
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "Leverancier"
 
@@ -3713,7 +3736,7 @@ msgstr "Leverancier"
 msgid "Select supplier"
 msgstr "Leverancier selecteren"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr "Voorraad beheers eenheid voor leveranciers"
 
@@ -3733,7 +3756,7 @@ msgstr "URL voor link externe leveranciers onderdeel"
 msgid "Supplier part description"
 msgstr "Omschrijving leveranciersdeel"
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr "Standaardvaluta die gebruikt wordt voor deze leverancier"
 msgid "Company Name"
 msgstr "Bedrijfsnaam"
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr "Op voorraad"
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr "Aangepaste status sleutel"
@@ -3841,10 +3888,6 @@ msgstr "Geplaatst"
 msgid "Invalid status code"
 msgstr "Ongeldige statuscode"
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr "Ongeldige export indeling"
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Data bestand"
@@ -3925,7 +3968,7 @@ msgstr "Oorspronkelijke rij gegevens"
 msgid "Errors"
 msgstr "Fouten"
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr "Geldig"
 
@@ -4013,51 +4056,51 @@ msgstr "Gegevensbestand bevat te veel rijen"
 msgid "Value must be a valid dictionary object"
 msgstr "Waarde moet een geldig woordenboek teken zijn"
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr "Kopieën"
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr "Aantal afdrukken voor elk label"
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr "Verbonden"
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr "Onbekend"
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr "Afdrukken"
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr "Geen media"
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr "Het papier is vastgelopen"
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr "Verbinding verbroken"
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr "Label printer"
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr "Direct labels afdrukken voor verschillende items."
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr "Printer locatie"
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr "Bereik de printer naar een specifieke locatie"
 
@@ -4117,7 +4160,7 @@ msgstr "Configuratie type"
 msgid "Order Reference"
 msgstr "Order Referentie"
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr "Uitmuntend"
 
@@ -4125,7 +4168,7 @@ msgstr "Uitmuntend"
 msgid "Has Project Code"
 msgstr "Heeft een projectcode"
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr "Aangemaakt Door"
 
@@ -4161,53 +4204,53 @@ msgstr "Doel datum voor"
 msgid "Target Date After"
 msgstr "Doel datum na"
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr "Heeft prijsstelling"
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr "Voltooid voor"
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr "Voltooid na"
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr "Bestellen"
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr "Bestelling voltooid"
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr "Intern onderdeel"
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr "Bestelling in behandeling"
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "Voltooid"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr "Heeft verzending"
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr "Inkooporder"
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr "Inkooporder"
 msgid "Sales Order"
 msgstr "Verkooporder"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr "Retour bestelling"
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "Totaalprijs"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr "Totaalprijs van deze bestelling"
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr "Valuta bestelling"
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr "Valuta voor deze order (laat leeg om de standaard van het bedrijf te gebruiken)"
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr "Deze bestelling is vergrendeld en kan niet worden gewijzigd"
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr "Contact komt niet overeen met het geselecteerde bedrijf"
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr "Startdatum moet voor einddatum liggen"
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr "Bestelling beschrijving (optioneel)"
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr "Selecteer projectcode voor deze bestelling"
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr "Link naar externe pagina"
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr "Start datum"
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr "Geplande startdatum voor deze bestelling"
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "Streefdatum"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr "Verwachte datum voor levering van de bestelling. De bestelling wordt achterstallig na deze datum."
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr "Gebruiker of groep verantwoordelijk voor deze order"
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr "Contactpunt voor deze volgorde"
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr "Bedrijf adres voor deze bestelling"
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr "Orderreferentie"
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr "Inkooporder status"
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr "Bedrijf waar de artikelen van worden besteld"
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr "Leveranciersreferentie"
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr "Order referentiecode van leverancier"
-
-#: order/models.py:584
-msgid "received by"
-msgstr "ontvangen door"
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr "Datum van uitgifte"
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr "Order uitgegeven op datum"
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr "Gebruiker of groep verantwoordelijk voor deze order"
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr "Contactpunt voor deze volgorde"
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr "Bedrijf adres voor deze bestelling"
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr "Orderreferentie"
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr "Inkooporder status"
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr "Bedrijf waar de artikelen van worden besteld"
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr "Leveranciersreferentie"
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr "Order referentiecode van leverancier"
+
+#: order/models.py:546
+msgid "received by"
+msgstr "ontvangen door"
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr "Order voltooid op datum"
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "Bestemming"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr "Bestemming voor ontvangen items"
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr "Onderdeelleverancier moet overeenkomen met de Inkooporderleverancier"
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr "Hoeveelheid moet een positief getal zijn"
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "Klant"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr "Bedrijf waaraan de artikelen worden verkocht"
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr "Verkooporder status"
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr "Klantreferentie "
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr "Klant order referentiecode"
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr "Verzenddatum"
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr "verzonden door"
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr "Bestelling is al afgerond"
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr "Order is al geannuleerd"
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr "Alleen een open bestelling kan als voltooid worden gemarkeerd"
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr "Bestelling kan niet worden voltooid omdat er onvolledige verzendingen aanwezig zijn"
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr "Order kan niet worden voltooid omdat er onvolledige artikelen aanwezig zijn"
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr "Order kan niet worden voltooid omdat er onvolledige artikelen aanwezig zijn"
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr "De bestelling is vergrendeld en kan niet worden gewijzigd"
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr "Hoeveelheid artikelen"
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr "Artikelregel referentie"
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr "Artikel notities"
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr "Doeldatum voor dit regelitem (laat leeg om de doeldatum van de bestelling te gebruiken)"
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr "Regelomschrijving (optioneel)"
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr "Additionele context voor deze regel"
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr "Stukprijs"
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr "Inkooporder regel item"
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr "Leveranciersonderdeel moet overeenkomen met leverancier"
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr "Leveranciersonderdeel"
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr "Ontvangen"
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr "Aantal ontvangen artikelen"
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr "Inkoopprijs"
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr "Aankoopprijs per stuk"
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr "Extra regel inkooporder"
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr "Verkooporder regel item"
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr "Virtueel onderdeel kan niet worden toegewezen aan een verkooporder"
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr "Alleen verkoopbare onderdelen kunnen aan een verkooporder worden toegewezen"
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "Verkoopprijs"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr "Prijs per stuk"
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Verzonden"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr "Verzonden hoeveelheid"
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr "Verzending van verkooporder"
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr "Datum van verzending"
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr "Leveringsdatum"
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr "Datum van levering van zending"
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr "Gecontroleerd door"
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr "Gebruiker die deze zending gecontroleerd heeft"
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr "Zending"
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr "Zendingsnummer"
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr "Volgnummer"
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr "Zending volginformatie"
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr "Factuurnummer"
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr "Referentienummer voor bijbehorende factuur"
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr "Verzending is al verzonden"
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr "Zending heeft geen toegewezen voorraadartikelen"
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr "Verkooporder extra regel"
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr "Toewijzing verkooporder"
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr "Voorraadartikel is niet toegewezen"
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr "Kan het voorraadartikel niet toewijzen aan een regel met een ander onderdeel"
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr "Kan voorraad niet toewijzen aan een regel zonder onderdeel"
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr "Toewijzingshoeveelheid kan niet hoger zijn dan de voorraadhoeveelheid"
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr "Hoeveelheid moet 1 zijn voor geserialiseerd voorraadartikel"
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr "Verkooporder komt niet overeen met zending"
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr "Verzending komt niet overeen met verkooporder"
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr "Regel"
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr "Verzendreferentie verkooporder"
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr "Artikel"
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr "Selecteer voorraadartikel om toe te wijzen"
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr "Voer voorraadtoewijzingshoeveelheid in"
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr "Retour order referentie"
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr "Bedrijf van waaruit items worden teruggestuurd"
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr "Retour bestelling status"
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr "Retourneer bestelregel item"
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr "Voorraad item moet worden opgegeven"
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr "Retour hoeveelheid overschrijdt voorraad hoeveelheid"
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr "Het retour aantal moet groter zijn dan nul"
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr "Ongeldige hoeveelheid voor geserialiseerde voorraad"
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr "Selecteer te retourneren product van de klant"
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr "Ontvangst datum"
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr "De datum waarop dit retour item is ontvangen"
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr "Resultaat"
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr "Resultaat van deze regel item"
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr "Kosten geassocieerd met teruggave of reparatie voor deze regel item"
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr "Retourneren extra regel"
 
@@ -4707,7 +4750,7 @@ msgstr "Artikel dupliceren"
 msgid "Specify options for duplicating this order"
 msgstr "Specificeer opties voor het dupliceren van deze bestelling"
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr "Ongeldige  order ID"
 
@@ -4752,7 +4795,7 @@ msgstr "Items samenvoegen"
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr "Items met hetzelfde onderdeel, bestemming en doeldatum samenvoegen in één regelitem"
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr "SKU"
 
@@ -4788,7 +4831,7 @@ msgstr "Artikel"
 msgid "Line item does not match purchase order"
 msgstr "Artikelregel komt niet overeen met inkooporder"
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr "Selecteer bestemmingslocatie voor ontvangen artikelen"
 
@@ -4812,7 +4855,7 @@ msgstr "Voer serienummers in voor inkomende voorraadartikelen"
 msgid "Override packaging information for incoming stock items"
 msgstr "Overschrijf verpakkingsinformatie voor binnenkomende voorraad"
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr "Extra opmerking voor inkomende voorraad items"
 
@@ -4832,7 +4875,7 @@ msgstr "Streepjescode is al in gebruik"
 msgid "An integer quantity must be provided for trackable parts"
 msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen"
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr "Artikelen moeten worden opgegeven"
 
@@ -4892,32 +4935,32 @@ msgstr "Geen overeenkomst gevonden voor de volgende serienummers"
 msgid "The following serial numbers are unavailable"
 msgstr "De volgende serienummers zijn niet beschikbaar"
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr "Retourneer regel item"
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr "Voorraad status code"
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr "Artikelregel komt niet overeen met inkooporder"
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr "Regel item is al ontvangen"
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr "Artikelen kunnen alleen worden ontvangen tegen lopende bestellingen"
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr "Hoeveelheid te retourneren"
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr "Lijn prijs valuta"
 
@@ -4971,107 +5014,103 @@ msgstr "Achterstallige Verkooporder"
 msgid "Sales order {so} is now overdue"
 msgstr "Verkooporder {so} is nu achterstallig"
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr "Favoriet"
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr "Filter op categorieën met ster"
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr "Diepte"
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr "Filteren op categorie diepte"
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr "Hoogste niveau"
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr "Filteren op topniveau categorieën"
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr "Stapelen"
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr "Inclusief subcategorieën in gefilterde resultaten"
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr "Bovenliggend"
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr "Filter op bovenliggende categorie"
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr "Boomstructuur uitsluiten"
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr "Subcategorieën uitsluiten in de opgegeven categorie"
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr "Heeft resultaten"
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr "Binnenkomende Inkooporder"
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr "Uitgaande Verkooporder"
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr "Geproduceerde voorraad door Productieorder"
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr "Voorraad vereist voor Productieorder"
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr "Valideer de gehele materiaalbon"
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr "Deze optie moet geselecteerd worden"
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr "Is een variant"
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr "Is revisie"
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr "Heeft revisies"
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr "BOM Valid"
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr "Assemblage deel is testbaar"
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr "Component onderdeel is testbaar"
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr "Gebruik"
 
@@ -5121,7 +5160,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr "U kunt deze voorraadlocatie niet structureel maken omdat sommige voorraadartikelen er al in liggen!"
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "Onderdelen"
 
@@ -5236,7 +5275,7 @@ msgstr "Deel sleutelwoorden om de zichtbaarheid van de zoekresultaten te verbete
 msgid "Part category"
 msgstr "Onderdeel Categorie"
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr "IPN"
@@ -5245,7 +5284,7 @@ msgstr "IPN"
 msgid "Part revision or version number"
 msgstr "Onderdeel revisie of versienummer"
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr "Revisie"
 
@@ -5277,7 +5316,7 @@ msgstr "Standaard verval datum"
 msgid "Expiry time (in days) for stock items of this part"
 msgstr "Verlooptijd (in dagen) voor voorraadartikelen van dit deel"
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr "Minimum voorraad"
 
@@ -5614,7 +5653,7 @@ msgstr "Test beschrijving"
 msgid "Enter description for this test"
 msgstr "Voer beschrijving in voor deze test"
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "Ingeschakeld"
 
@@ -5898,309 +5937,301 @@ msgstr "Bestand is geen afbeelding"
 msgid "Number of parts using this template"
 msgstr "Aantal onderdelen die deze sjabloon gebruiken"
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr "Geen onderdelen geselecteerd"
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr "Selecteer categorie"
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr "Oorspronkelijk onderdeel"
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr "Selecteer origineel onderdeel om te dupliceren"
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr "Afbeelding kopiëren"
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr "Afbeelding kopiëren van het oorspronkelijke onderdeel"
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr "Copy BOM"
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr "Kopieer materiaal van het oorspronkelijke deel"
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr "Parameters kopiëren"
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr "Parameter data kopiëren van het originele onderdeel"
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr "Notities kopiëren"
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr "Kopieer notities van het originele deel"
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr "Eerste voorraad hoeveelheid"
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr "Specificeer de initiële voorraad hoeveelheid voor dit onderdeel. Als het aantal nul is, wordt er geen voorraad toegevoegd."
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr "Eerste voorraad locatie"
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr "Specificeer locatie van de eerste voorraad voor dit onderdeel"
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr "Selecteer leverancier (of laat leeg om niets in te vullen)"
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr "Selecteer fabrikant (of laat leeg om niets in te vullen)"
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr "Fabrikant artikel nummer"
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr "Geselecteerde onderneming is geen geldige leverancier"
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr "Geselecteerde bedrijf is geen geldige fabrikant"
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr "Fabrikant deel dat overeenkomt met deze MPN bestaat al"
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr "Leveranciersdeel dat overeenkomt met deze SKU bestaat al"
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr "Categorie naam"
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr "Bouwen"
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr "Voorraadartikelen"
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr "Revisies"
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "Leveranciers"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr "Totale Voorraad"
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr "Niet toegewezen voorraad"
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr "Variant voorraad"
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr "Dupliceer onderdeel"
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr "Kopieer eerste gegevens uit een ander onderdeel"
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr "Eerste voorraad"
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr "Maak onderdeel met eerste voorraad"
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr "Leveranciersgegevens"
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr "Aanvankelijke leveranciersinformatie voor dit deel toevoegen"
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr "Categorie parameters kopiëren"
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr "Parameter sjablonen kopiëren uit geselecteerde onderdeel categorie"
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr "Bestaande afbeelding"
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr "Bestandsnaam van een bestaande onderdeel afbeelding"
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr "Afbeeldingsbestand bestaat niet"
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr "Limiteer de voorraadrapportage tot een bepaald onderdeel en eventuele variant onderdelen"
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr "Limiteer de voorraadrapportage tot een bepaalde deelcategorie en alle onderliggende categorieën"
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr "Limiteer de voorraadrapportage tot een bepaalde voorraadlocatie en alle onderliggende locaties"
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr "Externe voorraad uitsluiten"
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr "Voorraadartikelen op externe locaties uitsluiten"
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr "Rapport genereren"
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr "Genereer een bestand met berekende voorraad namen gegevens"
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr "Onderdelen bijwerken"
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr "Bijwerken van de opgegeven onderdelen met berekende voorraad gegevens"
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr "Voorraadcontrole functionaliteit is niet ingeschakeld"
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Achtergrondwerker check is gefaald"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr "Minimale prijs"
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr "Overschrijf berekende waarde voor minimale prijs"
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr "Minimale prijs valuta"
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr "Maximale prijs"
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr "Overschrijf de berekende waarde voor de maximale prijs"
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr "Maximale prijs valuta"
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr "Bijwerken"
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr "Prijzen voor dit onderdeel bijwerken"
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr "Kan niet converteren van de verstrekte valuta naar {default_currency}"
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr "Minimumprijs mag niet hoger zijn dan de maximale prijs"
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr "Maximale prijs mag niet lager zijn dan de minimale prijs"
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr "Selecteer de bovenliggende assemblage"
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr "Selecteer het onderdeel"
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr "Kan bouwen"
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr "Selecteer onderdeel om BOM van te kopiëren"
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr "Bestaande gegevens verwijderen"
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr "Verwijder bestaande BOM items voor het kopiëren"
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr "Inclusief overgenomen"
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr "Inclusief stuklijst BOM items die worden overgenomen van getemplated onderdelen"
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr "Ongeldige regels overslaan"
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr "Schakel deze optie in om ongeldige rijen over te slaan"
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr "Verwijder vervangend deel"
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr "Kopieer vervangende onderdelen bij dubbele stuklijst BOM items"
 
@@ -6337,28 +6368,28 @@ msgstr "Voorraad item toegewezen aan verkooporder"
 msgid "Not enough information"
 msgstr "Te weinig informatie"
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr "Gevonden overeenkomend item"
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr "Leveranciersdeel komt niet overeen met regelitem"
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr "Regelitem is al voltooid"
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr "Verdere informatie vereist om regelitem te ontvangen"
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr "Inkoopregel ontvangen"
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr "Kon geen regelitem ontvangen"
 
@@ -6438,15 +6469,15 @@ msgstr "Toe te wijzen hoeveelheid"
 msgid "Label printing failed"
 msgstr "Label afdrukken mislukt"
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr "Fout bij het renderen label naar PDF"
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr "Fout bij het renderen van label naar HTML"
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr "Geen producten aangeboden om af te drukken"
 
@@ -6480,7 +6511,7 @@ msgstr "Feature opties"
 
 #: plugin/base/ui/serializers.py:61
 msgid "Feature Context"
-msgstr ""
+msgstr "Feature context"
 
 #: plugin/base/ui/serializers.py:64
 msgid "Feature Source (javascript)"
@@ -6495,11 +6526,13 @@ msgid "Provides native support for barcodes"
 msgstr "Biedt ondersteuning voor barcodes"
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6529,6 +6562,112 @@ msgstr "Korte barcode voorvoegsel"
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr "Aanpassen van prefix voor korte streepjescodes, kan handig zijn voor omgevingen met meerdere InvenTree instanties"
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr "InvenTree notificaties"
@@ -6575,21 +6714,21 @@ msgstr "InvenTree valuta wisselkoers"
 msgid "Default currency exchange integration"
 msgstr "Standaard munteenheden omwisselen integratie"
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr "InvenTree PDF label printer"
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr "Biedt ondersteuning voor het drukken van PDF labels"
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr "Foutopsporing modus"
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr "Schakel debug modus in - retourneert ruwe HTML in plaats van PDF"
 
@@ -6603,53 +6742,53 @@ msgstr "Biedt ondersteuning voor het printen met een machine"
 
 #: plugin/builtin/labels/inventree_machine.py:164
 msgid "last used"
-msgstr "Laatst gebruikt"
+msgstr "laatst gebruikt"
 
 #: plugin/builtin/labels/inventree_machine.py:181
 msgid "Options"
 msgstr "Opties"
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr "Paginaformaat voor het label blad"
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr "Labels overslaan"
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr "Dit aantal labels bij het afdrukken van labels overslaan"
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr "Rand"
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr "Print een rand rond elk label"
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr "Liggend"
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr "Print het label blad in liggende modus"
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr "InvenTree label plaat printer"
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr "Arrays multiple labels op een enkele plaat"
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr "Label is te groot voor pagina grootte"
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr "Geen labels gegenereerd"
 
@@ -6699,7 +6838,7 @@ msgstr "Biedt ondersteuning voor het scannen van TME barcodes  "
 
 #: plugin/builtin/suppliers/tme.py:27
 msgid "The Supplier which acts as 'TME'"
-msgstr "De leverancier die fungeert als \"TME”"
+msgstr "De leverancier die als \"TME” optreedt "
 
 #: plugin/installer.py:229 plugin/installer.py:307
 msgid "Only staff users can administer plugins"
@@ -6794,7 +6933,7 @@ msgstr "Ingebouwde plug-in"
 msgid "Package Plugin"
 msgstr "Pakket plug-in"
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr "Plug-in"
 
@@ -6802,32 +6941,32 @@ msgstr "Plug-in"
 msgid "Method"
 msgstr "Methode"
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr "Geen auteur gevonden"
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr "De plug-in '{p}' is niet compatibel met de huidige InvenTree versie {v}"
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr "De plug-in vereist minimaal versie {v}"
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr "Plug-in vereist op de hoogste versie {v}"
 
 #: plugin/samples/integration/sample.py:52
 msgid "Enable PO"
-msgstr ""
+msgstr "PO inschakelen"
 
 #: plugin/samples/integration/sample.py:53
 msgid "Enable PO functionality in InvenTree interface"
-msgstr ""
+msgstr "PO functionaliteit inschakelen in de InvenTree interface"
 
 #: plugin/samples/integration/sample.py:58
 msgid "API Key"
@@ -7007,34 +7146,33 @@ msgstr "Deze plug-in activeren"
 
 #: plugin/serializers.py:249
 msgid "Delete configuration"
-msgstr "Configuratie verwijderen?"
+msgstr "Configuratie verwijderen"
 
 #: plugin/serializers.py:250
 msgid "Delete the plugin configuration from the database"
 msgstr "Verwijder de plug-in configuratie uit de database"
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr "Items"
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr "Plug-in niet gevonden"
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr "Plug-in is niet actief"
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr "Plug-in ondersteunt geen label printen"
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr "Ongeldige label afmetingen"
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr "Geen geldige items aan de template verstrekt"
 
@@ -7054,172 +7192,136 @@ msgstr "Juridisch"
 msgid "Letter"
 msgstr "Brief"
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr "Sjabloonbestand met deze naam bestaat al"
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr "Template naam"
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr "Template beschrijving"
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr "Revisie nummer (auto verhogen)"
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr "Bevestig aan het model bij afdrukken"
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr "Sla rapport output op als bijlage ten opzichte van gekoppelde model instantie bij afdrukken"
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr "Bestandsnaam Patroon"
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr "Patroon voor het genereren van bestandsnamen"
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr "Template is ingeschakeld"
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr "Doel type model voor sjabloon"
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "Filters"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
-msgstr "Sjabloon zoekfilters (door komma's gescheiden lijst van sleutel=waarde paren"
+msgstr "Sjabloon zoekfilters (door komma's gescheiden lijst van sleutel=waarde paren)"
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr "Sjabloon bestand"
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr "Standaard paginagrootte voor PDF rapport"
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr "Rapportage weergeven in liggende stand"
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr "Rapport gegenereerd door template {self.name}"
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr "Fout bij genereren rapport"
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "Breedte [mm]"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr "Label breedte, gespecificeerd in mm"
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "Hoogte [mm]"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr "Label hoogte, gespecificeerd in mm"
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr "Fout afdrukken van labels"
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr "Aantal items om te verwerken"
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr "Rapport genereren is voltooid"
-
-#: report/models.py:692
-msgid "Progress"
-msgstr "Voortgang"
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr "Rapport generatie vooruitgang"
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr "Rapporteer sjabloon"
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr "Uitvoer bestand"
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr "Gegenereerd uitvoerbestand"
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr "Label uitvoer plug-in"
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr "Label sjabloon"
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
-msgstr ""
+msgstr "Tekstfragment"
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr "Rapporteer snippet bestand"
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
-msgstr ""
+msgstr "Snippet bestandsbeschrijving"
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
-msgstr ""
+msgstr "Asset"
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr "Rapporteer asset bestand"
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
-msgstr ""
+msgstr "Beschrijving asset bestand"
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr "Selecteer rapport template"
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr "Lijst van primaire productsleutels op te nemen in het verslag"
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr "Selecteer label sjabloon"
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr "Plug-in printen"
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr "Selecteer de plug-in voor het afdrukken van labels"
 
@@ -7337,7 +7439,7 @@ msgstr "Serienummer"
 
 #: report/templatetags/report.py:144
 msgid "Asset file does not exist"
-msgstr ""
+msgstr "Asset bestand bestaat niet"
 
 #: report/templatetags/report.py:201 report/templatetags/report.py:277
 msgid "Image file not found"
@@ -7371,103 +7473,103 @@ msgstr "Bovenliggende locatie"
 msgid "Filter by parent location"
 msgstr "Filter op bovenliggende locatie"
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
-msgstr ""
+msgstr "Naam van onderdeel (hoofdletter ongevoelig)"
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr "Naam van onderdeel bevat (hoofdletter ongevoelig)"
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr "Naam onderdeel (regex)"
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr "Deel IPN (hoofdletter ongevoelig)"
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr "Onderdeel IPN bevat (hoofdletter ongevoelig)"
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr "Deel IPN (regex)"
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr "Minimale voorraad"
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
-msgstr "Maximale voorraad:"
+msgstr "Maximale voorraad"
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr "Status code"
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr "Externe locatie"
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr "Verbruikt door productieorder"
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr "Geïnstalleerd in een ander voorraadartikel"
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr "Boomstructuur onderdeel"
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr "Eerder bijgewerkt"
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr "Bijgewerkt na"
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr "Voorraadcontrole voor"
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr "Voorraadcontrole na"
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr "Vervaldatum voor"
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr "Vervaldatum na"
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr "Verouderd"
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr "Hoeveelheid is vereist"
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr "Geldig onderdeel moet worden opgegeven"
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr "Het opgegeven leveranciers onderdeel bestaat niet"
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr "Het leveranciersdeel heeft een pakketgrootte gedefinieerd, maar vlag use_pack_size niet ingesteld"
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr "Serienummers kunnen niet worden meegeleverd voor een niet traceerbaar onderdeel"
 
@@ -7503,7 +7605,7 @@ msgstr "Selecteer eigenaar"
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr "Voorraaditems kunnen niet direct worden geplaatst op een structurele voorraadlocatie, maar kunnen zich op onderliggende locaties bevinden."
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr "Extern"
 
@@ -7727,7 +7829,7 @@ msgstr "Item notities"
 
 #: stock/models.py:2670
 msgid "Stock Item Test Result"
-msgstr "Resultaat voorraad test resultaten "
+msgstr "Resultaat voorraad test resultaten"
 
 #: stock/models.py:2701
 msgid "Value must be provided for this test"
@@ -8357,199 +8459,199 @@ msgstr "Verkooporders"
 msgid "Return Orders"
 msgstr "Retour orders"
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr "Toestemming set"
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "Groep"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "Weergeven"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "Machtiging om items te bekijken"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr "Toevoegen"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "Machtiging om items toe te voegen"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "Wijzigen"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "Machtigingen om items te bewerken"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "Verwijderen"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "Toestemming om items te verwijderen"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr "Bot"
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr "Intern"
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr "Gast"
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr "Taal"
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr "Voorkeurstaal voor gebruiker"
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr "Thema"
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
-msgstr "Instellingen voor de webinterface als JSON - niet handmatig bewerken!"
+msgstr "Instellingen voor webinterface als JSON - niet handmatig bewerken!"
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr "Widget"
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr "Instellingen voor de dashboard widgets als JSON - wijzig niet handmatig!"
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr "Naam weergeven"
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr "Gekozen weergavenaam voor de gebruiker"
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr "Functie"
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr "Titel of positie hoofdtaken"
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr "Gebruiker status bericht"
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
-msgstr "Gebruikers locatie informatie"
+msgstr "Informatie over locatie gebruiker"
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr "Gebruiker gebruikt actief het systeem"
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr "Voorkeursinformatie voor de gebruiker"
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr "Type"
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr "Welk type gebruiker is dit?"
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr "Organisatie"
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr "Gebruikers primaire organisatie/affiliatie"
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr "Primaire groep"
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr "Primaire groep van de gebruiker"
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Gebruikersnaam"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Voornaam :"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "Voornaam van de gebruiker"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Achternaam"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "Achternaam van de gebruiker"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "E-mailadres van de gebruiker"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "Medewerkers"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr "Heeft deze gebruiker medewerker machtigingen"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr "Administrator "
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr "Is deze gebruiker een administrator "
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "Is dit gebruikersaccount actief"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "Je bent niet bevoegd om deze gebruikersrol te wijzigen."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Alleen administrators kunnen nieuwe gebruikers aanmaken"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "Je account is aangemaakt."
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "Gebruik de wachtwoordreset functie om in te loggen"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "Welkom bij InvenTree"
 
diff --git a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po
index 67f708ba05..6586cb3794 100644
--- a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Norwegian\n"
 "Language: no_NO\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "API-endepunkt ikke funnet"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Brukeren har ikke rettigheter til å se denne modellen"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "Kunne ikke konvertere {original} til {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Ugyldig mengde oppgitt"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "Verdi '{name}' vises ikke i mønsterformat"
 msgid "Provided value does not match required pattern: "
 msgstr "Angitt verdi samsvarer ikke med påkrevd mønster: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Tom serienummerstreng"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Duplisert serienummer"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "Gruppesekvens {group} overskrider tillatt antall ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Ingen serienummer funnet"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Antall unike serienumre ({len(serials)}) må samsvare med antallet ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Fjern HTML-tagger fra denne verdien"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr "Kinesisk (tradisjonell)"
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "E-post"
 
@@ -391,19 +403,19 @@ msgstr "Duplikatnavn kan ikke eksistere under samme overordnede"
 msgid "Invalid choice"
 msgstr "Ugyldig valg"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Navn"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Beskrivelse"
 msgid "Description (optional)"
 msgstr "Beskrivelse (valgfritt)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Sti"
 
@@ -510,28 +522,28 @@ msgstr "Svinn kan ikke overstige 100%"
 msgid "Invalid value for overage"
 msgstr "Ugyldig verdi for svinn"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "Ordrestatus"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Overordnet produksjon"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr "Del"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "Kategori"
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "Produksjonen må avbrytes før den kan slettes"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "Forbruksvare"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Valgfritt"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "Sammenstilling"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Spores"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Tildelt"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Tilgjengelig"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Produksjonsordre"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Produksjonsordrer"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr "Sammenstillings-BOMen er ikke godkjent"
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr "Produksjonsordre kan ikke opprettes for en inaktiv del"
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr "Produksjonsordre kan ikke opprettes for en ulåst del"
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Ugyldig valg for overordnet produksjon"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "Ansvarlig bruker eller gruppe må spesifiseres"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "Produksjonsordrens del kan ikke endres"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Produksjonsordre-referanse"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Produksjonsordre-referanse"
 msgid "Reference"
 msgstr "Referanse"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "Kort beskrivelse av produksjonen (valgfritt)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "Produksjonsordre som denne produksjonen er tildelt"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Velg del å produsere"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Salgsordrereferanse"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Salgsordren denne produksjonen er tildelt til"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Kildeplassering"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Velg plassering å ta lagerbeholdning fra for denne produksjonen (la stå tomt for a ta fra alle lagerplasseringer)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Fullført plassering"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Velg plassering der fullførte artikler vil bli lagret"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Produksjonsmengde"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Antall lagervarer å produsere"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Fullførte artikler"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Antall lagervarer som er fullført"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Produksjonsstatus"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Produksjonsstatuskode"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Batchkode"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Batchkode for denne produksjonsartikkelen"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Opprettelsesdato"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Forventet sluttdato"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Måldato for ferdigstillelse. Produksjonen vil være forfalt etter denne datoen."
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Fullført dato"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "fullført av"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Utstedt av"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "Brukeren som utstedte denne produksjonsordren"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Ansvarlig"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "Bruker eller gruppe ansvarlig for produksjonsordren"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Ekstern lenke"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Lenke til ekstern URL"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "Produksjonsprioritet"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "Produksjonsordrens prioritet"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "Prosjektkode"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "Prosjektkode for denne produksjonsordren"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr "Kunne ikke delegere bort oppgaven for å fullføre tildelinger"
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "Produksjonsordre {build} er fullført"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "En produksjonsordre er fullført"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr "Serienumre må angis for sporbare deler"
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "Ingen produksjonsartikkel spesifisert"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "Produksjonsartikkelen er allerede fullført"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "Produksjonsartikkelen samsvarer ikke med produksjonsordren"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "Mengden må være større enn null"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "Kvantitet kan ikke være større enn utgangsantallet"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "Produksjonsartikkel {serial} har ikke bestått alle påkrevde tester"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr "Produksjonsartikkel"
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "Produksjonsobjekt"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "Produksjonsobjekt"
 msgid "Quantity"
 msgstr "Antall"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "Påkrevd antall for produksjonsordre"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "Produksjonselement må spesifisere en produksjonsartikkel, da master-del er merket som sporbar"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "Tildelt antall ({q}) kan ikke overstige tilgjengelig lagerbeholdning ({a})"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "Lagervaren er overtildelt"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "Tildelingsantall må være større enn null"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "Mengden må være 1 for serialisert lagervare"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "Valgt lagervare samsvarer ikke med BOM-linjen"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "Valgt lagervare samsvarer ikke med BOM-linjen"
 msgid "Stock Item"
 msgstr "Lagervare"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Kildelagervare"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Lagerantall å tildele til produksjonen"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Monteres i"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Lagervare for montering"
 
@@ -1034,10 +1057,10 @@ msgstr "Angi serienummer for produksjonsartikler"
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Plassering"
 
@@ -1053,7 +1076,7 @@ msgstr "Automatisk tildeling av serienummer"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "Automatisk tildeling av nødvendige artikler med tilsvarende serienummer"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "Følgende serienummer finnes allerede eller er ugyldige"
@@ -1082,10 +1105,10 @@ msgstr "Grunn for skroting av produksjonsartikler"
 msgid "Location for completed build outputs"
 msgstr "Plassering for ferdige produksjonsartikler"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Status"
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr "Leverandørdel"
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr "Tillat Varianter"
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "BOM-artikkel"
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr "Tildelt lagerbeholdning"
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr "I bestilling"
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr "I produksjon"
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr "Ekstern lagerbeholdning"
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "Tilgjengelig lagerbeholdning"
 
@@ -1356,7 +1379,7 @@ msgstr "Kansellert"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Fullført"
 
@@ -1405,536 +1428,536 @@ msgstr "Ingen gyldige valutakoder angitt"
 msgid "No plugin"
 msgstr "Ingen programtillegg"
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "Oppdatert"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "Tidsstempel for forrige oppdatering"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "Unik prosjektkode"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "Prosjektbeskrivelse"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr "Bruker eller gruppe ansvarlig for dette prosjektet"
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "Innstillings verdi"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr "Valgt verdi er ikke et gyldig alternativ"
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr "Verdien må være en boolsk verdi"
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr "Verdien må være et heltall"
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr "Nøkkelstreng må være unik"
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Bruker"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr "Antall for prisbrudd"
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "Pris"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr "Enhetspris på spesifisert antall"
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr "Endepunkt"
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr "Endepunktet hvor denne webhooken er mottatt"
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr "Navn for webhooken"
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Aktiv"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr "Er webhooken aktiv"
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr "Sjetong"
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr "Nøkkel for tilgang"
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "Hemmelig"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr "Delt hemmlighet for HMAC"
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr "Melding ID"
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr "Unik Id for denne meldingen"
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr "Vert"
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr "Verten denne meldingen ble mottatt fra"
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr "Tittel"
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr "Overskrift for denne meldingen"
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr "Brødtekst"
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr "Innholdet i meldingen"
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr "Endepunktet meldingen ble mottatt fra"
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr "Arbeidet med"
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr "Var arbeidet med denne meldingen ferdig?"
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "Tittel"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Lenke"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "Publisert"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "Forfatter"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "Sammendrag"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr "Les"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr "Er dette nyhetselementet lest?"
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "Bilde"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "Bildefil"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr "Enhetssymbolet må være unikt"
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr "Enhetsnavn må være en gyldig identifikator"
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr "Enhetsnavn"
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr "Symbol"
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr "Valgfritt enhetssymbol"
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr "Definisjon"
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr "Enhetsdefinisjon"
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Vedlegg"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Fil mangler"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Mangler eksternlenke"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Velg fil å legge ved"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Kommentar"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr "Vedleggskommentar"
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr "Opplastet dato"
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr "Datoen som filen ble lastet opp"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr "Filstørrelse"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr "Filstørrelse i byte"
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr "Ugyldig modelltype spesifisert for vedlegg"
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "Verdi"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "Opprettet"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr "Sist oppdatert"
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr "Kontekst"
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr "Resultat"
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr "{verbose_name} kansellert"
 msgid "A order that is assigned to you was canceled"
 msgstr "En ordre som er tildelt til deg ble kansellert"
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr "Artikler mottatt"
 
@@ -2036,7 +2059,7 @@ msgstr "Nøkkelordargumenter for oppgave"
 msgid "Filename"
 msgstr "Filnavn"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr "Modelltype"
 
@@ -2384,8 +2407,8 @@ msgstr "Kopier designmaler for kategoriparametere"
 msgid "Copy category parameter templates when creating a part"
 msgstr "Kopier parametermaler for kategori ved oppretting av en del"
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "Mal"
@@ -2398,8 +2421,8 @@ msgstr "Deler er maler som standard"
 msgid "Parts can be assembled from other components by default"
 msgstr "Deler kan settes sammen fra andre komponenter som standard"
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "Komponent"
 
@@ -2415,7 +2438,7 @@ msgstr "Kjøpbar"
 msgid "Parts are purchaseable by default"
 msgstr "Deler er kjøpbare som standard"
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr "Salgbar"
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Sidestørrelse"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr "Leverandør er aktiv"
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "Produsent"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Firma"
 
@@ -3497,8 +3520,8 @@ msgstr "Kontakt-telefonnummer"
 msgid "Contact email address"
 msgstr "Kontakt e-post"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "Kontakt"
 
@@ -3542,7 +3565,7 @@ msgstr "Produserer dette firmaet deler?"
 msgid "Default currency used for this company"
 msgstr "Standardvaluta brukt for dette firmaet"
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "Adresse"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr "Velg produsent"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr "MPN"
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr "Den sammenkoblede produsentdelen må referere til samme basisdel"
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "Leverandør"
 
@@ -3713,7 +3736,7 @@ msgstr "Leverandør"
 msgid "Select supplier"
 msgstr "Velg leverandør"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr "Leverandørens lagerbeholdningsenhet"
 
@@ -3733,7 +3756,7 @@ msgstr "URL for ekstern leverandørdel-lenke"
 msgid "Supplier part description"
 msgstr "Leverandørens delbeskrivelse"
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr "Standardvaluta brukt for denne leverandøren"
 msgid "Company Name"
 msgstr "Bedriftsnavn"
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr "På lager"
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr "Plassert"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Datafil"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr "Gyldig"
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr "Ukjent"
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr "Ordrereferanse"
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr "Opprettet av"
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr "Ordre"
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr "Intern del"
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "Fullført"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr "Innkjøpsordre"
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr "Innkjøpsordre"
 msgid "Sales Order"
 msgstr "Salgsordre"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr "Returordre"
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "Total pris"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr "Total pris for denne ordren"
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr "Ordrevaluta"
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr "Valuta for denne ordren (la stå tom for å bruke firmastandard)"
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr "Kontakten samsvarer ikke med valgt firma"
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr "Ordrebeskrivelse (valgfritt)"
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr "Velg prosjektkode for denne ordren"
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr "Lenke til ekstern side"
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "Måldato"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr "Forventet dato for levering av ordre. Bestillingen vil være forfalt etter denne datoen."
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr "Bruker eller gruppe ansvarlig for ordren"
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr "Kontaktpunkt for denne ordren"
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr "Selskapsadresse for denne ordren"
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr "Ordrereferanse"
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr "Status for innkjøpsordre"
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr "Firma som varene blir bestilt fra"
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr "Leverandørreferanse"
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr "Leverandørens ordrereferanse"
-
-#: order/models.py:584
-msgid "received by"
-msgstr "mottatt av"
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr "Sendt dato"
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr "Dato bestillingen ble sendt"
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr "Bruker eller gruppe ansvarlig for ordren"
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr "Kontaktpunkt for denne ordren"
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr "Selskapsadresse for denne ordren"
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr "Ordrereferanse"
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr "Status for innkjøpsordre"
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr "Firma som varene blir bestilt fra"
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr "Leverandørreferanse"
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr "Leverandørens ordrereferanse"
+
+#: order/models.py:546
+msgid "received by"
+msgstr "mottatt av"
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr "Dato ordre ble fullført"
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "Destinasjon"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr "Delleverandør må matche PO-leverandør"
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr "Mengde må være positiv"
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "Kunde"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr "Firma som varene selges til"
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr "Kundereferanse "
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr "Kundens ordrereferanse"
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr "Forsendelsesdato"
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr "sendt av"
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr "Kun en åpen ordre kan merkes som fullført"
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr "Bestillingen kan ikke fullføres da det finnes ufullstendige forsendelser"
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr "Denne ordren kan ikke fullføres da det fortsatt er ufullstendige artikler"
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr "Antall"
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr "Linjereferanse"
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr "Linjenotater"
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr "Måldato for denne linjen (la stå tomt for å bruke måldatoen fra ordren)"
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr "Linjeelementbeskrivelse (valgfritt)"
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr "Ytterligere kontekst for denne linjen"
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr "Enhetspris"
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr "Delens leverandør må samsvare med leverandør"
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr "Leverandørdel"
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr "Mottatt"
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr "Antall enheter mottatt"
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr "Innkjøpspris"
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr "Enhet-innkjøpspris"
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr "Virtuell del kan ikke tildeles salgsordre"
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr "Kun salgbare deler kan tildeles en salgsordre"
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "Salgspris"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr "Enhets-salgspris"
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Sendt"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr "Sendt antall"
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr "Dato for forsendelse"
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr "Leveringsdato"
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr "Dato for levering av forsendelse"
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr "Sjekket Av"
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr "Brukeren som sjekket forsendelsen"
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr "Forsendelse"
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr "Forsendelsesnummer"
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr "Sporingsnummer"
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr "Sporingsinformasjon for forsendelse"
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr "Fakturanummer"
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr "Referansenummer for tilknyttet faktura"
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr "Forsendelsen er allerede sendt"
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr "Forsendelsen har ingen tildelte lagervarer"
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr "Lagervarer er ikke blitt tildelt"
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr "Kan ikke tildele lagervare til en linje med annen del"
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr "Kan ikke tildele lagerbeholdning til en linje uten en del"
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr "Tildelingsantall kan ikke overstige tilgjengelig lagerbeholdning"
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr "Antall må være 1 for serialisert lagervare"
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr "Salgsordre samsvarer ikke med forsendelse"
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr "Forsendelsen samsvarer ikke med salgsordre"
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr "Linje"
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr "Forsendelsesreferanse for salgsordre"
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr "Artikkel"
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr "Velg lagervare å tildele"
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr "Angi lagertildelingsmengde"
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr "Returordre-referanse"
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr "Firmaet delen skal returneres fra"
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr "Returordrestatus"
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr "Velg artikkel som skal returneres fra kunde"
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr "Mottatt Dato"
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr "Datoen denne returartikkelen ble mottatt"
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr "Utfall"
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr "Utfall for dette linjeelementet"
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr "Kostnad forbundet med retur eller reparasjon for dette linjeelementet"
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr "SKU-kode"
 
@@ -4787,7 +4830,7 @@ msgstr "Ordrelinje"
 msgid "Line item does not match purchase order"
 msgstr "Linjeelementet samsvarer ikke med innkjøpsordre"
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr "Velg lagerplassering for mottatte enheter"
 
@@ -4811,7 +4854,7 @@ msgstr "Angi serienummer for innkommende lagervarer"
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr "Strekkode allerede i bruk"
 msgid "An integer quantity must be provided for trackable parts"
 msgstr "Heltallsverdi må angis for sporbare deler"
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr "Linjeelementer må være oppgitt"
 
@@ -4891,32 +4934,32 @@ msgstr "Ingen treff funnet for følgende serienummer"
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr "Returordrelinje"
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr "Lagervare statuskode"
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr "Linjeelementet samsvarer ikke med returordre"
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr "Linjeelementet er allerede mottatt"
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr "Artikler kan bare mottas mot ordrer som pågår"
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr "Valuta for linje"
 
@@ -4970,107 +5013,103 @@ msgstr "Forfalt Salgsordre"
 msgid "Sales order {so} is now overdue"
 msgstr "Salgsordre {so} er nå forfalt"
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr "Innkommende innkjøpsordre"
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr "Utgående salgsordre"
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr "Lagervarer produsert av en produksjonsordre"
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr "Lagervarer påkrevd for produksjonsordre"
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr "Godkjenn hele Stykklisten"
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr "Dette alternativet må være valgt"
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr "Du kan ikke gjøre denne delkategorien strukturell fordi noen deler allerede er tilordnet den!"
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "Deler"
 
@@ -5235,7 +5274,7 @@ msgstr "Del-nøkkelord for å øke synligheten i søkeresultater"
 msgid "Part category"
 msgstr "Delkategori"
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr "Delrevisjon eller versjonsnummer"
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr "Revisjon"
 
@@ -5276,7 +5315,7 @@ msgstr "Standard utløp"
 msgid "Expiry time (in days) for stock items of this part"
 msgstr "Utløpstid (i dager) for lagervarer av denne delen"
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr "Minimal lagerbeholdning"
 
@@ -5613,7 +5652,7 @@ msgstr "Testbeskrivelse"
 msgid "Enter description for this test"
 msgstr "Legg inn beskrivelse for denne testen"
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "Aktivert"
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr "Ingen deler valgt"
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr "Velg kategori"
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr "Original Del"
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr "Velg original del å duplisere"
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr "Kopier Bilde"
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr "Kopier bilde fra originaldel"
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr "Kopier Stykkliste"
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr "Kopier stykkliste fra original del"
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr "Kopier parametere"
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr "Kopier parameterdata fra originaldel"
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr "Kopier notater"
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr "Kopier notater fra originaldel"
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr "Innledende lagerbeholdning"
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr "Angi initiell lagermengde for denne delen. Hvis antall er null, er ingen lagerbeholdning lagt til."
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr "Innledende lagerplassering"
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr "Angi initiell lagerplasering for denne delen"
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr "Velg leverandør (eller la stå tom for å hoppe over)"
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr "Velg produsent (eller la stå tom for å hoppe over)"
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr "Produsentens delenummer"
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr "Valgt firma er ikke en gyldig leverandør"
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr "Valgt firma er ikke en gyldig produsent"
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr "Produsentdel som matcher dette MPN-et, finnes allerede"
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr "Leverandørdel som matcher denne SKU-en, finnes allerede"
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr "Kategorinavn"
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr "Produseres"
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr "Lagervarer"
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "Leverandører"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr "Total lagerbeholdning"
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr "Dupliser del"
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr "Kopier innledende data fra en annen del"
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr "Innledende lagerbeholdning"
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr "Lag en del med innledende lagermengde"
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr "Leverandøropplysninger"
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr "Legg til innledende leverandørinformasjon for denne delen"
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr "Kopier kategoriparametre"
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr "Kopier parametermaler fra valgt delkategori"
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr "Eksisterende bilde"
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr "Filnavn for et eksisterende del-bilde"
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr "Bildefilen finnes ikke"
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr "Begrens lagerbeholdningsrapport til en bestemt del og enhver variant av delen"
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr "Begrens lagerbeholdningsrapport til en bestemt delkategori og alle underkategorier"
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr "Begrens lagerbeholdningsrapport til en bestemt plasering og eventuelle underplasseringer"
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr "Ekskluder ekstern lagerbeholdning"
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr "Ekskluder lagervarer i eksterne lokasjoner"
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr "Generer rapport"
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr "Genererer rapport som inneholder beregnede lagerdata"
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr "Oppdater deler"
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr "Oppdater spesifiserte deler med beregnede lagerbeholdningsdata"
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr "Lagerbeholdningsfunksjonalitet er ikke aktivert"
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Sjekk av bakgrunnsarbeider mislyktes"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr "Minstepris"
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr "Overstyr beregnet verdi for minimumspris"
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr "Valuta for minstepris"
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr "Makspris"
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr "Overstyr beregnet verdi for maksimal pris"
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr "Valuta for maksimal pris"
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr "Oppdater"
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr "Oppdater priser for denne delen"
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr "Kan ikke konvertere fra gitte valutaer til {default_currency}"
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr "Minsteprisen kan ikke være større enn maksimal pris"
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr "Maksimal pris kan ikke være mindre enn minstepris"
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr "Kan Produsere"
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr "Velg del å kopiere BOM fra"
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr "Fjern eksisterende data"
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr "Fjern eksisterende BOM-artikler før kopiering"
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr "Inkluder arvede"
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr "Inkluder BOM-artikler som er arvet fra maldeler"
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr "Hopp over ugyldige rader"
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr "Aktiver dette alternativet for å hoppe over ugyldige rader"
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr "Kopier erstatningsdeler"
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr "Kopier erstatningsdeler når BOM-elementer dupliseres"
 
@@ -6336,28 +6367,28 @@ msgstr "Lagervaren er tildelt en salgsordre"
 msgid "Not enough information"
 msgstr "Ikke nok informasjon"
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr "Mer informasjon nødvendig for å motta artikkelen"
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr "Mottok ordreartikkelen"
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr "Antall å tildele"
 msgid "Label printing failed"
 msgstr "Utskrift av etikett mislyktes"
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr "Gir innebygd støtte for strekkoder"
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr "InvenTree-varsler"
@@ -6574,21 +6713,21 @@ msgstr "InvenTree valutautveksling"
 msgid "Default currency exchange integration"
 msgstr "Standard valutaintegrasjon"
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr "InvenTree PDF etikettskriver"
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr "Gir innebygd støtte for å skrive ut PDF-etiketter"
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr "Feilsøkingsmodus"
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr "Aktiver feilsøkingsmodus - returnerer rå HTML i stedet for PDF"
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr "Sidestørrelse på etikett-arket"
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr "Hopp over etiketter"
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr "Hopp over dette antallet etiketter når det skrives ut etiketterark"
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr "Kantlinjer"
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr "Skriv ut en kant rundt hver etikett"
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr "Liggende"
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr "Skriv ut etikett-arket i liggende modus"
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr "InvenTree etikett-ark skriver"
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr "Sprer ut flere etiketter på ett enkelt ark"
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr "Etiketten er for stor for sidestørrelse"
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr "Ingen etiketter ble generert"
 
@@ -6793,7 +6932,7 @@ msgstr "Innebygd utvidelse"
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr "Utvidelse"
 
@@ -6801,21 +6940,21 @@ msgstr "Utvidelse"
 msgid "Method"
 msgstr "Metode"
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr "Ingen forfatter funnet"
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr "Utvidensen '{p}' er ikke kompatibel med nåværende InvenTree-versjon {v}"
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr "Utvidelsen krever minst versjon {v}"
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr "Utvidelsen krever maks versjon {v}"
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr "Malnavn"
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr "Filnavnmønster"
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "Filtre"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr "Sidestørrelse for PDF-rapporter"
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr "Generer rapport i landskapsorientering"
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "Bredde [mm]"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr "Etikettbredde, spesifisert i mm"
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "Høyde [mm]"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr "Etiketthøyde, spesifisert i mm"
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr "Snutt"
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr "Rapportsnuttfil"
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr "Filbeskrivelse for snutt"
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr "Ressurs"
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr "Rapportressursfil"
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr "Ressursfilbeskrivelse"
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr "Statuskode"
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr "Ekstern plassering"
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr "Del-tre"
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr "Utløpsdato før"
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr "Utløpsdato etter"
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr "Foreldet"
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr "Antall kreves"
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr "Gyldig del må oppgis"
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr "Oppgitt leverandørdel eksisterer ikke"
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr "Leverandørdelen har en pakkestørrelse definert, men flagget \"use_pack_size\" er ikke satt"
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr "Serienumre kan ikke angis for en ikke-sporbar del"
 
@@ -7502,7 +7604,7 @@ msgstr "Velg eier"
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr "Lagervarer kan ikke knyttes direkte mot en strukturell lagerplassering, men kan knyttes mot underplasseringer."
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr "Ekstern"
 
@@ -8356,199 +8458,199 @@ msgstr "Salgsordre"
 msgid "Return Orders"
 msgstr "Returordrer"
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr "Tillatelse satt"
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "Gruppe"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "Visning"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "Tillatelse til å se elementer"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr "Legg til"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "Tillatelse til å legge til elementer"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "Endre"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "Tillatelse til å endre elementer"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "Slett"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "Tillatelse til å slette elementer"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Brukernavn"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Fornavn"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "Fornavn på brukeren"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Etternavn"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "Etternavn på brukeren"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "E-postadressen til brukeren"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "Personale"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr "Har denne brukeren personelltillatelser"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr "Superbruker"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr "Er denne brukeren en superbruker"
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "Er denne brukerkontoen aktiv"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "Du har ikke tillatelse til å endre denne brukerrollen."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Bare superbrukere kan opprette nye brukere"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "Din konto er opprettet."
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "Vennligst bruk funksjonen for å tilbakestille passord for å logge inn"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "Velkommen til InvenTree"
 
diff --git a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po
index 703cb31764..a0b2878527 100644
--- a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Polish\n"
 "Language: pl_PL\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "Nie znaleziono punktu końcowego API"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Użytkownik nie ma uprawnień do przeglądania tego modelu"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "Nie udało się przeliczyć {original} na {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Podano nieprawidłową ilość"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "Wartość '{name}' nie pojawia się w formacie wzoru"
 msgid "Provided value does not match required pattern: "
 msgstr "Podana wartość nie pasuje do wymaganego wzoru: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Pusty ciąg numeru seryjnego"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Podwójny numer seryjny"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "Zakres grupy {group} przekracza dozwoloną ilość ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Nie znaleziono numerów seryjnych"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Liczba unikalnych numerów seryjnych ({len(serials)}) musi odpowiadać ilości ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Usuń znaczniki HTML z tej wartości"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr "chiński (tradycyjny)"
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "Adres E-Mail"
 
@@ -391,19 +403,19 @@ msgstr "Duplikaty nazw nie mogą istnieć pod tym samym rodzicem"
 msgid "Invalid choice"
 msgstr "Błędny wybór"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Nazwa"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Opis"
 msgid "Description (optional)"
 msgstr "Opis (opcjonalny)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Ścieżka"
 
@@ -510,28 +522,28 @@ msgstr "Przedawnienie nie może przekroczyć 100 %"
 msgid "Invalid value for overage"
 msgstr "Nieprawidłowa wartość przedawnienia"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "Status zamówienia"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Budowa nadrzędna"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr "Komponent"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "Kategoria"
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "Kompilacja musi zostać anulowana, zanim będzie mogła zostać usunięta"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "Materiał eksploatacyjny"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Opcjonalne"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "Złożenie"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Śledzony"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Przydzielono"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Dostępne"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Zlecenie Budowy"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Zlecenia budowy"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Nieprawidłowy wybór kompilacji nadrzędnej"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "Odpowiedzialny użytkownik lub grupa muszą być określone"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "Nie można zmienić elementu kompletacji"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Odwołanie do zamówienia wykonania"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Odwołanie do zamówienia wykonania"
 msgid "Reference"
 msgstr "Referencja"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "Krótki opis produkcji (opcjonalny)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "Zamówienie budowy, do którego budowa jest przypisana"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Wybierz część do budowy"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Odwołanie do zamówienia sprzedaży"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Zamówienie sprzedaży, do którego budowa jest przypisana"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Lokalizacja źródła"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Wybierz lokalizację, z której pobrać element do budowy (pozostaw puste, aby wziąć z dowolnej lokalizacji)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Lokalizacja docelowa"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Wybierz lokalizację, w której będą przechowywane ukończone elementy"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Ilość do stworzenia"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Ilość przedmiotów do zbudowania"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Ukończone elementy"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Ilość produktów magazynowych które zostały ukończone"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Status budowania"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Kod statusu budowania"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Kod partii"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Kod partii dla wyjścia budowy"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Data utworzenia"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Docelowy termin zakończenia"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Docelowa data zakończenia kompilacji. Po tej dacie kompilacja będzie zaległa."
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Data zakończenia"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "zrealizowane przez"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Wydany przez"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "Użytkownik, który wydał to zamówienie"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Odpowiedzialny"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "Użytkownik lub grupa odpowiedzialna za te zlecenie produkcji"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Link Zewnętrzny"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Link do zewnętrznego adresu URL"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "Priorytet budowy"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "Priorytet tego zamówienia produkcji"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "Kod projektu"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "Kod projektu dla tego zlecenia produkcji"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "Kolejność kompilacji {build} została zakończona"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "Kolejność kompilacji została zakończona"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "Nie określono danych wyjściowych budowy"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "Budowanie wyjścia jest już ukończone"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "Skompilowane dane wyjściowe nie pasują do kolejności kompilacji"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "Ilość musi być większa niż zero"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "Ilość nie może być większa niż ilość wyjściowa"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "Wyjście budowy {serial} nie przeszło wszystkich testów"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "Zbuduj obiekt"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "Zbuduj obiekt"
 msgid "Quantity"
 msgstr "Ilość"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "Wymagana ilość dla zlecenia produkcji"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "Element kompilacji musi określać dane wyjściowe kompilacji, ponieważ część główna jest oznaczona jako możliwa do śledzenia"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "Przydzielona ilość ({q}) nie może przekraczać dostępnej ilości zapasów magazynowych ({a})"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "Pozycja magazynowa jest nadmiernie przydzielona"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "Alokowana ilość musi być większa niż zero"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "Ilość musi wynosić 1 dla serializowanych zasobów"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "Wybrana pozycja magazynowa nie pasuje do pozycji w zestawieniu BOM"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "Wybrana pozycja magazynowa nie pasuje do pozycji w zestawieniu BOM"
 msgid "Stock Item"
 msgstr "Element magazynowy"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Lokalizacja magazynowania przedmiotu"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Ilość zapasów do przydzielenia do produkcji"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Zainstaluj do"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Docelowa lokalizacja magazynowa przedmiotu"
 
@@ -1034,10 +1057,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Lokalizacja"
 
@@ -1053,7 +1076,7 @@ msgstr "Automatycznie przydzielaj numery seryjne"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "Automatycznie przydzielaj wymagane elementy z pasującymi numerami seryjnymi"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "Poniższe numery seryjne już istnieją lub są nieprawidłowe"
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Status"
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr "Zezwalaj na warianty"
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "Element BOM"
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr "W Zamówieniu"
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr "W produkcji"
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "Dostępna ilość"
 
@@ -1356,7 +1379,7 @@ msgstr "Anulowano"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Zakończono"
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr "Brak wtyczki"
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "Zaktualizowany"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "Data ostatniej aktualizacji"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "Unikalny kod projektu"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "Opis projektu"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr "Użytkownik lub grupa odpowiedzialna za to zamówienie"
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "Ustawienia wartości"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr "Wybrana wartość nie jest poprawną opcją"
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr "Wartość musi być wartością binarną"
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr "Wartość musi być liczbą całkowitą"
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr "Ciąg musi być unikatowy"
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Użytkownik"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "Cena"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr "Punkt końcowy"
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Aktywny"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "Sekret"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr "Współdzielony sekret dla HMAC"
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr "Id wiadomości"
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr "Unikalny identyfikator dla tej wiadomości"
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr "Host, od którego otrzymano tę wiadomość"
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr "Nagłówek"
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr "Nagłówek tej wiadomości"
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr "Zawartość"
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Łącze"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "Autor"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "Obraz"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Załącznik"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Brak pliku"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Brak zewnętrznego odnośnika"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Wybierz plik do załączenia"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Komentarz"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "Wartość"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "Utworzony"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr "Ostatnia aktualizacja"
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr "Dane"
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr "Wynik"
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr "Nazwa pliku"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "Szablon"
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "Komponent"
 
@@ -2415,7 +2438,7 @@ msgstr "Możliwość zakupu"
 msgid "Parts are purchaseable by default"
 msgstr "Części są domyślnie z możliwością zakupu"
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr "Możliwość sprzedaży"
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Rozmiar strony"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "Producent"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Firma"
 
@@ -3497,8 +3520,8 @@ msgstr "Numer telefonu kontaktowego"
 msgid "Contact email address"
 msgstr "Kontaktowy adres e-mail"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "Kontakt"
 
@@ -3542,7 +3565,7 @@ msgstr "Czy to przedsiębiorstwo produkuje części?"
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "Adres"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr "Wybierz producenta"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "Dostawca"
 
@@ -3713,7 +3736,7 @@ msgstr "Dostawca"
 msgid "Select supplier"
 msgstr "Wybierz dostawcę"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr "Domyślna waluta używana dla tego dostawcy"
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr "Na stanie"
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr "Umieszczony"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Plik danych"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr "Ważny"
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr "Kopie"
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr "Liczba kopii do wydrukowania dla każdej etykiety"
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr "Połączono"
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr "Nieznany"
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr "Drukowanie"
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr "Brak mediów"
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr "Rozłączono"
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr "Drukarka etykiet"
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr "Bezpośrednio wydrukuj etykiety dla różnych elementów."
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr "Lokalizacja drukarki"
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr "Numer zamówienia"
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr "Utworzony przez"
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr "Posiada ceny"
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr "Zamówienie"
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr "Komponent wewnętrzny"
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr "Zamówienie oczekujące"
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "Zakończone"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr "Zlecenie zakupu"
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr "Zlecenie zakupu"
 msgid "Sales Order"
 msgstr "Zamówienie zakupu"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "Cena całkowita"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr "Link do zewnętrznej witryny"
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "Data docelowa"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr "Użytkownik lub grupa odpowiedzialna za to zamówienie"
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr "Odniesienie zamówienia"
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr "Status zamówienia zakupu"
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr "odebrane przez"
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr "Data wydania"
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr "Data wystawienia zamówienia"
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr "Użytkownik lub grupa odpowiedzialna za to zamówienie"
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr "Odniesienie zamówienia"
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr "Status zamówienia zakupu"
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr "odebrane przez"
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "Przeznaczenie"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr "Wartość musi być liczbą dodatnią"
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "Klient"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr "Data wysyłki"
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr "wysłane przez"
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr "Ilość elementów"
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr "Odebrane"
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr "Cena zakupu"
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr "Cena zakupu jednostkowego"
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "Cena sprzedaży"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr "Jednostkowa cena sprzedaży"
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Wysłane"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr "Wysłana ilość"
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr "Data wysyłki"
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr "Sprawdzone przez"
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr "Użytkownik, który sprawdził tę wysyłkę"
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr "Przesyłka"
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr "Numer przesyłki"
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr "Numer śledzenia"
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr "Informacje o śledzeniu przesyłki"
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr "Przesyłka została już wysłana"
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr "Zarezerwowana ilość nie może przekraczać ilości na stanie"
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr "Linia"
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr "Komponent"
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr "Pozycja nie pasuje do zlecenia zakupu"
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr "Nadchodzące zlecenie zakupu"
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr "Ta opcja musi być zaznaczona"
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "Części"
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr "Wersja"
 
@@ -5276,7 +5315,7 @@ msgstr "Domyślne wygasanie"
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr "Minimalny stan magazynowy"
 
@@ -5613,7 +5652,7 @@ msgstr "Testowy opis"
 msgid "Enter description for this test"
 msgstr "Wprowadź opis do tego testu"
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "Aktywne"
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr "Kopiuj obraz"
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr "Kopiuj BOM"
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr "Kopiuj parametry"
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr "Towary"
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "Dostawcy"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr "Duplikuj część"
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Sprawdzenie robotnika w tle nie powiodło się"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr "Usuń istniejące dane"
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr "Pomiń nieprawidłowe wiersze"
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr "Włącz tę opcję, aby pominąć nieprawidłowe wiersze"
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr "Dalsze informacje wymagane do odbioru pozycji"
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr "Otrzymana pozycja zlecenia zakupu"
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr "Tryb Debugowania"
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr "Wtyczka wbudowana"
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr "Wtyczka"
 
@@ -6801,21 +6940,21 @@ msgstr "Wtyczka"
 msgid "Method"
 msgstr "Metoda"
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr "Nie znaleziono autora"
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr "Nazwa szablonu"
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr "Wzór nazwy pliku"
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "Filtry"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr "Domyślna wielkość strony dla raportów PDF"
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr "Renderuj raport w orientacji poziomej"
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "Szerokość [mm]"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "Wysokość [mm]"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr "Wycinek"
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr "Wybierz właściciela"
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr "Uprawnienia nadane"
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "Grupa"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "Widok"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "Uprawnienie do wyświetlania przedmiotów"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr "Dodaj"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "Uprawnienie do dodawania przedmiotów"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "Zmień"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "Uprawnienie do edycji przedmiotów"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "Usuń"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "Uprawnienie do usuwania przedmiotów"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "Czy to konto użytkownika jest aktywne"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "Nie masz uprawnień do zmiany tej roli użytkownika."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Tylko superużytkownicy mogą tworzyć nowych użytkowników"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "Twoje konto zostało utworzone."
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "Zresetuj hasło"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "Witamy w InvenTree"
 
diff --git a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po
index e85da73dcf..4b7c1674ac 100644
--- a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Portuguese\n"
 "Language: pt_PT\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "API endpoint não encontrado"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Usuário não tem permissão para ver este modelo"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "Não foi possível converter {original} para {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Quantidade fornecida inválida"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "Valor '{name}' não está no formato correto"
 msgid "Provided value does not match required pattern: "
 msgstr "O valor fornecido não corresponde ao padrão exigido: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Número serial em branco"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Número de série duplicado"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "Intervalo do grupo {group} excede a quantidade permitida ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Nenhum número de série foi encontrado"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Números de série únicos ({len(serials)}) deve corresponder a quantidade ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Remova as \"tags\" HTML deste valor"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr "Chinês (Tradicional)"
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "Email"
 
@@ -391,19 +403,19 @@ msgstr "Nomes duplicados não podem existir sob o mesmo parental"
 msgid "Invalid choice"
 msgstr "Escolha inválida"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Nome"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Descrição"
 msgid "Description (optional)"
 msgstr "Descrição (opcional)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Caminho"
 
@@ -510,28 +522,28 @@ msgstr "Excedente não deve exceder 100%"
 msgid "Invalid value for overage"
 msgstr "Valor de excedente inválido"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "Situação do pedido"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Produção Progenitor"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr "Peça"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "Categoria"
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "Produção deve ser cancelada antes de ser deletada"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "Consumível"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Opcional"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "Montagem"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Monitorado"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Alocado"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Disponível"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Ordem de Produção"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Ordens de Produções"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Escolha de Produção parental inválida"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "Usuário ou grupo responsável deve ser especificado"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "Peça da ordem de produção não pode ser alterada"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Referência do pedido de produção"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Referência do pedido de produção"
 msgid "Reference"
 msgstr "Referência"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "Breve descrição da produção (opcional)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "Pedido de produção para qual este serviço está alocado"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Selecionar peça para produção"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Referência do pedido de venda"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Pedido de Venda para qual esta produção está alocada"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Local de Origem"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Selecione a localização para pegar do estoque para esta produção (deixe em branco para tirar a partir de qualquer local de estoque)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Local de Destino"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Selecione o local onde os itens concluídos serão armazenados"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Quantidade de Produção"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Número de itens em estoque para produzir"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Itens concluídos"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Número de itens em estoque concluídos"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Progresso da produção"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Código de situação da produção"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Código de Lote"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Código do lote para esta saída de produção"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Criado em"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Data alvo final"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Data alvo para finalização de produção. Estará atrasado a partir deste dia."
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Data de conclusão"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "Concluído por"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Emitido por"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "Usuário que emitiu este pedido de produção"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Responsável"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "Usuário ou grupo responsável para este pedido de produção"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Link Externo"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Link para URL externa"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "Prioridade de Produção"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "Prioridade deste pedido de produção"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "Código do projeto"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "Código do projeto para este pedido de produção"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr "Falha ao descarregar tarefa para concluir alocações de construção"
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "O Pedido de produção {build} foi concluído!"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "Um pedido de produção foi concluído"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr "Números de série devem ser fornecidos para peças rastreáveis"
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "Nenhuma saída de produção especificada"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "Saída de produção já completada"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "Saída da produção não corresponde ao Pedido de Produção"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "Quantidade deve ser maior que zero"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "Quantidade não pode ser maior do que a quantidade de saída"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "O item de produção {serial} não passou todos os testes necessários"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr "Item da linha de Produção"
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "Objeto de produção"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "Objeto de produção"
 msgid "Quantity"
 msgstr "Quantidade"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "Quantidade necessária para o pedido de produção"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "Item de produção deve especificar a saída, pois peças mestres estão marcadas como rastreáveis"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "Quantidade alocada ({q}) não deve exceder a quantidade disponível em estoque ({a})"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "O item do estoque está sobre-alocado"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "Quantidade alocada deve ser maior que zero"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "Quantidade deve ser 1 para estoque serializado"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "Item estoque selecionado não coincide com linha da LDM"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "Item estoque selecionado não coincide com linha da LDM"
 msgid "Stock Item"
 msgstr "Item de estoque"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Origem do item em estoque"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Quantidade do estoque para alocar à produção"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Instalar em"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Destino do Item do Estoque"
 
@@ -1034,10 +1057,10 @@ msgstr "Digite os números de série para saídas de produção"
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Local"
 
@@ -1053,7 +1076,7 @@ msgstr "Alocar Números de Série Automaticamente"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "Alocar automaticamente os itens necessários com os números de série correspondentes"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "Os seguintes números de série já existem ou são inválidos"
@@ -1082,10 +1105,10 @@ msgstr "Motivo para sucatear saída(s) de produção"
 msgid "Location for completed build outputs"
 msgstr "Local para saídas de produção concluídas"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Situação"
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr "Fornecedor da Peça"
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr "Permitir variações"
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "Item LDM"
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr "Estoque Alocado"
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr "No pedido"
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr "Em Produção"
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "Estoque Disponível"
 
@@ -1356,7 +1379,7 @@ msgstr "Cancelado"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Completado"
 
@@ -1405,536 +1428,536 @@ msgstr "Nenhum código de moeda válido foi fornecido"
 msgid "No plugin"
 msgstr "Sem extensão"
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "Atualizado"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "Tempo da última atualização"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "Código único do projeto"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "Descrição do projeto"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr "Usuário ou grupo responsável por este projeto"
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "Valor da Configuração"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr "Valor escolhido não é uma opção válida"
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr "Valor deve ser um valor booleano"
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr "Valor deve ser um número inteiro"
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr "A frase senha deve ser diferenciada"
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Usuario"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr "Quantidade de Parcelamentos"
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "Preço"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr "Preço unitário na quantidade especificada"
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr "Ponto final"
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr "Ponto final em qual o gancho web foi recebido"
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr "Nome para este webhook"
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Ativo"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr "Este gancho web está ativo"
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr "Token de acesso"
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "Segredo"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr "Segredo compartilhado para HMAC"
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr "ID da Mensagem"
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr "Identificador exclusivo desta mensagem"
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr "Servidor"
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr "Servidor do qual esta mensagem foi recebida"
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr "Cabeçalho"
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr "Cabeçalho da mensagem"
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr "Corpo"
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr "Corpo da mensagem"
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr "Ponto do qual esta mensagem foi recebida"
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr "Trabalhado em"
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr "O trabalho desta mensagem foi concluído?"
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "Título"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Ligação"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "Publicado"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "Autor"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "Resumo"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr "Lida"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr "Esta notícia do item foi lida?"
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "Imagem"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "Arquivo de imagem"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr "Nome da unidade deve ser um identificador válido"
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr "Nome da unidade"
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr "Símbolo"
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr "Símbolo de unidade opcional"
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr "Definição"
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr "Definição de unidade"
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Anexo"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Arquivo ausente"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Link externo não encontrado"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Selecione arquivo para anexar"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Comentario"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "Valor"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "Criado"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr "Última atualização"
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr "Dados"
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr "Contexto"
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr "Resultado"
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr "{verbose_name} cancelado"
 msgid "A order that is assigned to you was canceled"
 msgstr "Um pedido atribuído a você foi cancelado"
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr "Itens Recebidos"
 
@@ -2036,7 +2059,7 @@ msgstr "Argumentos Palavra-chave da Tarefa"
 msgid "Filename"
 msgstr "Nome do arquivo"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr "Copiar Parâmetros dos Modelos de Categoria"
 msgid "Copy category parameter templates when creating a part"
 msgstr "Copiar parâmetros do modelo de categoria quando criar uma peça"
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "Modelo"
@@ -2398,8 +2421,8 @@ msgstr "Peças são modelos por padrão"
 msgid "Parts can be assembled from other components by default"
 msgstr "Peças podem ser montadas a partir de outros componentes por padrão"
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "Componente"
 
@@ -2415,7 +2438,7 @@ msgstr "Comprável"
 msgid "Parts are purchaseable by default"
 msgstr "Peças são compráveis por padrão"
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr "Vendível"
 
@@ -2619,8 +2642,8 @@ msgstr "Relatório de erros"
 msgid "Log errors which occur when generating reports"
 msgstr "Registro de erros que ocorrem ao gerar relatórios"
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Tamanho da página"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "Fabricante"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Empresa"
 
@@ -3497,8 +3520,8 @@ msgstr "Número de telefone do contato"
 msgid "Contact email address"
 msgstr "Endereço de e-mail do contato"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "Contato"
 
@@ -3542,7 +3565,7 @@ msgstr "Esta empresa fabrica peças?"
 msgid "Default currency used for this company"
 msgstr "Moeda padrão utilizada para esta empresa"
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "Endereço"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr "Selecionar fabricante"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr "NPF"
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr "Parte do fabricante vinculado deve fazer referência à mesma peça base"
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "Fornecedor"
 
@@ -3713,7 +3736,7 @@ msgstr "Fornecedor"
 msgid "Select supplier"
 msgstr "Selecione o fornecedor"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr "Unidade de reserva de estoque fornecedor"
 
@@ -3733,7 +3756,7 @@ msgstr "URL do link externo da peça do fabricante"
 msgid "Supplier part description"
 msgstr "Descrição da peça fornecedor"
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr "Moeda padrão utilizada para este fornecedor"
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr "Em Estoque"
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr "Colocado"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Arquivo de dados"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr "Válido"
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr "Desconhecido"
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr "Referência do Pedido"
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr "Criado por"
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr "Pedido"
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr "Peça Interna"
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "Concluído"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr "Pedido de Compra"
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr "Pedido de Compra"
 msgid "Sales Order"
 msgstr "Pedido de Venda"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr "Devolver pedido"
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "Preço Total"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr "Preço total deste pedido"
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr "Moeda do pedido"
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr "Moeda para este pedido (deixe em branco para usar o padrão da empresa)"
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr "O contato não corresponde à empresa selecionada"
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr "Descrição do pedido (opcional)"
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr "Selecione o código do projeto para este pedido"
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr "Link para página externa"
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "Data alvo"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr "Data esperada para entrega do pedido. O Pedido estará atrasado após esta data."
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr "Usuário ou grupo responsável para este pedido"
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr "Ponto de contato para este pedido"
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr "Endereço da empresa para este pedido"
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr "Referência do pedido"
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr "Situação do pedido de compra"
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr "Empresa da qual os itens estão sendo encomendados"
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr "Referencia do fornecedor"
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr "Código de referência do pedido fornecedor"
-
-#: order/models.py:584
-msgid "received by"
-msgstr "recebido por"
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr "Data de emissão"
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr "Dia que o pedido foi feito"
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr "Usuário ou grupo responsável para este pedido"
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr "Ponto de contato para este pedido"
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr "Endereço da empresa para este pedido"
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr "Referência do pedido"
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr "Situação do pedido de compra"
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr "Empresa da qual os itens estão sendo encomendados"
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr "Referencia do fornecedor"
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr "Código de referência do pedido fornecedor"
+
+#: order/models.py:546
+msgid "received by"
+msgstr "recebido por"
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr "Dia que o pedido foi concluído"
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "Destino"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr "Fornecedor de peça deve corresponder a fornecedor da OC"
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr "Quantidade deve ser um número positivo"
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "Cliente"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr "Empresa para qual os itens foi vendidos"
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr "Referência do Cliente "
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr "Código de Referência do pedido do cliente"
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr "Data de Envio"
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr "enviado por"
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr "Apenas um pedido aberto pode ser marcado como completo"
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr "Pedido não pode ser concluído, pois, há envios incompletos"
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr "Pedido não pode ser concluído, pois, há itens na linha incompletos"
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr "Quantidade do item"
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr "Referência do Item em Linha"
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr "Observações do Item de Linha"
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr "Data alvo para este item de linha (deixe em branco para usar a data alvo do pedido)"
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr "Descrição item de linha (opcional)"
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr "Contexto adicional para esta linha"
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr "Preço Unitário"
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr "A peça do fornecedor deve corresponder ao fornecedor"
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr "Fornecedor da Peça"
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr "Recebido"
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr "Número de itens recebidos"
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr "Preço de Compra"
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr "Preço unitário de compra"
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr "Peça virtual não pode ser atribuída a um pedido de venda"
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr "Apenas peças vendáveis podem ser atribuídas a um pedido de venda"
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "Preço de Venda"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr "Preço de venda unitário"
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Enviado"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr "Quantidade enviada"
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr "Data do envio"
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr "Data de Entrega"
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr "Data da entrega do envio"
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr "Verificado por"
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr "Usuário que verificou esta remessa"
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr "Remessa"
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr "Número do Envio"
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr "Número de Rastreamento"
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr "Informação de rastreamento da remessa"
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr "Número da Fatura"
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr "Número de referência para fatura associada"
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr "O pedido já foi enviado"
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr "Remessa não foi alocada nos itens de estoque"
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr "O item do estoque não foi atribuído"
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr "Não é possível alocar o item de estoque para uma linha de uma peça diferente"
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr "Não é possível alocar uma linha sem uma peça"
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr "A quantidade de alocação não pode exceder a quantidade em estoque"
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr "Quantidade deve ser 1 para item de estoque serializado"
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr "Pedidos de venda não coincidem com a remessa"
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr "Remessa não coincide com pedido de venda"
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr "Linha"
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr "Referência de remessa do pedido de venda"
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr "Selecione o item de estoque para alocar"
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr "Insira a quantidade de atribuição de estoque"
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr "Referência de Pedidos de Devolução"
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr "Empresa da qual os itens estão sendo retornados"
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr "Estado do pedido de retorno"
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr "Selecione o item a ser devolvido pelo cliente"
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr "Data de Recebimento"
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr "Data que o pedido a ser devolvido foi recebido"
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr "Despesa/gastos"
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr "Gastos com esta linha de itens"
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr "Gastos para reparar e/ou devolver esta linha de itens"
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr "Código (SKU)"
 
@@ -4787,7 +4830,7 @@ msgstr "Itens de linha"
 msgid "Line item does not match purchase order"
 msgstr "O item de linha não corresponde ao pedido de compra"
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr "Selecione o local de destino para os itens recebidos"
 
@@ -4811,7 +4854,7 @@ msgstr "Digite o número de série para itens de estoque recebidos"
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr "Código de barras já em uso"
 msgid "An integer quantity must be provided for trackable parts"
 msgstr "Quantidade inteira deve ser fornecida para peças rastreáveis"
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr "Itens de linha deve ser providenciados"
 
@@ -4891,32 +4934,32 @@ msgstr "Nenhuma correspondência encontrada para os seguintes números de série
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr "Devolver item do pedido"
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr "Código de estado do item estoque"
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr "Item do pedido não bate com o pedido de devolução"
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr "Item do pedido já foi recebido"
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr "Itens só podem ser recebidos de pedidos em processamento"
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr "Tipo de moeda para o item do pedido"
 
@@ -4970,107 +5013,103 @@ msgstr "Pedido de venda vencido"
 msgid "Sales order {so} is now overdue"
 msgstr "Pedido de venda {so} está atrasada"
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr "Pedido de compra recebido"
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr "Pedidos de Venda Feitos"
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr "Estoque produzido pelo Pedido de Produção"
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr "Estoque obrigatório para Pedido de Produção"
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr "Validar a Lista de Materiais completa"
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr "Esta opção deve ser selecionada"
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr "Você não pode tornar esta categoria em estrutural, pois, algumas partes já estão alocadas!"
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "Peças"
 
@@ -5235,7 +5274,7 @@ msgstr "Palavras-chave para melhorar a visibilidade nos resultados da pesquisa"
 msgid "Part category"
 msgstr "Categoria da Peça"
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr "Revisão de peça ou número de versão"
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr "Revisão"
 
@@ -5276,7 +5315,7 @@ msgstr "Validade Padrão"
 msgid "Expiry time (in days) for stock items of this part"
 msgstr "Validade (em dias) para itens do estoque desta peça"
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr "Estoque Mínimo"
 
@@ -5613,7 +5652,7 @@ msgstr "Descrição do Teste"
 msgid "Enter description for this test"
 msgstr "Digite a descrição para este teste"
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "Habilitado"
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr "Nenhuma parte selecionada"
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr "Selecionar categoria"
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr "Peça Original"
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr "Selecione a peça original para duplicar"
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr "Copiar imagem"
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr "Copiar imagem da peça original"
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr "Copiar LDM"
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr "Copiar lista de materiais da peça original"
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr "Copiar Parâmetros"
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr "Copiar dados do parâmetro da peça original"
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr "Copiar Notas"
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr "Copiar imagem da peça original"
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr "Quantidade Inicial de Estoque"
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr "Especificar a quantidade inicial de estoque para a peça. Se for zero, nenhum estoque é adicionado."
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr "Local Inicial do Estoque"
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr "Especifique o local do estoque inicial para esta Peça"
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr "Selecione o fornecedor (ou deixe em branco para pular)"
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr "Selecione fabricante (ou deixe em branco para pular)"
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr "Número de Peça do Fabricante"
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr "A empresa selecionada não é um fornecedor válido"
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr "A empresa selecionada não é um fabricante válido"
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr "A peça do fabricante que corresponde a essa MPN já existe"
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr "A peça do fornecedor que corresponde a essa SKU já existe"
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr "Nome da Categoria"
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr "Produzindo"
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr "Itens de Estoque"
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "Fornecedores"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr "Estoque Total"
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr "Peça duplicada"
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr "Copiar dados iniciais de outra peça"
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr "Estoque inicial"
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr "Criar peça com a quantidade inicial de estoque"
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr "Informações do Fornecedor"
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr "Adicionar informação inicial de fornecedor para esta peça"
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr "Copiar Parâmetros da Categoria"
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr "Copiar modelos de parâmetros a partir de categoria de peça selecionada"
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr "Imagem Existente"
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr "Nome de arquivo de uma imagem de peça existente"
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr "A imagem não existe"
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr "Limitar o relatório de balanço a uma determinada peça e quaisquer peças variantes"
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr "Limitar o relatório de balanço a uma determinada categoria, e qualquer peças filhas"
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr "Limitar o relatório de balanço a um determinado local de estoque, e qualquer local filho"
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr "Excluir Estoque externo"
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr "Excluir itens de estoque em locais externos"
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr "Gerar relatório"
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr "Gerar arquivo de relatório contendo dados de estoque calculados"
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr "Atualizar Peças"
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr "Atualizar peças especificadas com dados de estoque calculados"
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr "Função de Balanço de Estoque não está ativada"
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Falha em verificar o histórico do trabalhador"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr "Preço Mínimo"
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr "Sobrepor valor calculado para preço mínimo"
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr "Moeda do preço mínimo"
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr "Preço Máximo"
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr "Sobrepor valor calculado para preço máximo"
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr "Moeda do preço máximo"
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr "Atualizar"
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr "Atualizar preços desta peça"
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr "Não foi possível converter das moedas fornecidas para {default_currency}"
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr "Preço mínimo não pode ser maior que o preço máximo"
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr "Preço máximo não pode ser menor que o preço mínimo"
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr "Pode Produzir"
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr "Selecionar peça para copiar a LDM"
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr "Remover Dado Existente"
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr "Remova itens LDM existentes antes de copiar"
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr "Incluir Herdados"
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr "Incluir itens LDM que são herdados de peças modelo"
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr "Pular Linhas inválidas"
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr "Habilitar esta opção para pular linhas inválidas"
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr "Copiar Peças Substitutas"
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr "Copiar peças de substitutas quando duplicar itens de LDM"
 
@@ -6336,28 +6367,28 @@ msgstr "Item de estoque atribuído para pedido de venda"
 msgid "Not enough information"
 msgstr "Não há informação suficiente"
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr "Mais informações necessárias para receber o item de linha"
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr "Item de linha do pedido de compra recebido"
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr "Quantidade a alocar"
 msgid "Label printing failed"
 msgstr "Impressão de etiqueta falhou"
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr "Fornece suporte nativo para códigos de barras"
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr "Notificações do InvenTree"
@@ -6574,21 +6713,21 @@ msgstr "Câmbio de Moeda InvenTree"
 msgid "Default currency exchange integration"
 msgstr "Integração padrão de câmbio de moeda"
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr "Impressora de etiquetas PDF do InvenTree"
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr "Providenciar suporte nativo para impressão de etiquetas em PDF"
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr "Modo de depuração"
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr "Ativar o modo de depuração - retorna HTML bruto em vez de PDF"
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr "Tamanho da página para folha de etiqueta"
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr "Pular Etiquetas"
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr "Ignorar este número de etiquetas quando imprimir folhas de etiquetas"
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr "Borda"
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr "Imprima uma borda em torno de cada etiqueta"
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr "Paisagem"
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr "Imprimir a folha de etiqueta no modo paisagem"
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr "Impressora de folhas de etiqueta do InvenTree"
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr "Matriz várias etiquetas em uma única folha"
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr "A etiqueta é muito grande para tamanho de página"
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr "Nenhuma etiqueta foi gerada"
 
@@ -6793,7 +6932,7 @@ msgstr "Plugin embutido"
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr "Extensões"
 
@@ -6801,21 +6940,21 @@ msgstr "Extensões"
 msgid "Method"
 msgstr "Método"
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr "Nenhum autor encontrado"
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr "A extensão '{p}' não é compatível com a versão atual do InvenTree {v}"
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr "Extensão requer pelo menos a versão {v}"
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr "Extensão requer no máximo a versão {v}"
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr "Itens"
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr "Ofício"
 msgid "Letter"
 msgstr "Carta"
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr "Nome do modelo"
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr "Padrão de Nome de Arquivo"
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "Filtros"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr "Tamanho da página para relatórios PDF"
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr "Renderizar relatório em orientação paisagem"
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "Largura [mm]"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr "Largura da etiqueta, em mm"
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "Altura [mm]"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr "Altura da Etiqueta, em mm"
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr "Progresso"
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr "Recorte"
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr "Relatar arquivo de recorte"
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr "Descrição do arquivo de recorte"
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr "Patrimônio"
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr "Reportar arquivo de ativos"
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr "Descrição do arquivo de ativos"
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr "Selecione o modelo de etiqueta"
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr "Código da situação"
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr "Localização externa"
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr "Árvore de Peças"
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr "Data de validade antes"
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr "Data de validade depois"
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr "Inativo"
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr "Quantidade obrigatória"
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr "Uma peça válida deve ser fornecida"
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr "A peça do fornecedor informado não existe"
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr "A peça do fornecedor tem um tamanho de pacote definido, mas o item use_pack_size não foi definida"
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr "Números de série não podem ser fornecidos para uma parte não rastreável"
 
@@ -7502,7 +7604,7 @@ msgstr "Selecionar Responsável"
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr "Os itens de estoque podem não estar diretamente localizados em um local de estoque estrutural, mas podem ser localizados em locais filhos."
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr "Externo"
 
@@ -8356,199 +8458,199 @@ msgstr "Pedidos de vendas"
 msgid "Return Orders"
 msgstr "Pedidos de Devolução"
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr "Permissão definida"
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "Grupo"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "Visualizar"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "Permissão para ver itens"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr "Adicionar"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "Permissão para adicionar itens"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "Alterar"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "Permissões para editar itens"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "Excluir"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "Permissão para excluir itens"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Nome de usuário"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Primeiro Nome"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Sobrenome"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "Não tem permissões para alterar este papel do usuário."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Apenas superusuários podem criar novos usuários"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "Sua conta foi criada."
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "Por favor, use a função de redefinir senha para acessar"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "Bem-vindo(a) ao InvenTree"
 
diff --git a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po
index d55fb3e8eb..2fca0e1511 100644
--- a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Portuguese, Brazilian\n"
 "Language: pt_BR\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "API endpoint não encontrado"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr "Lista de itens inválida fornecida"
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr "Filtros inválidos fornecidos"
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
-msgstr "Nenhum item encontrado para excluir"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
+msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr ""
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr ""
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr ""
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr ""
 msgid "Provided value does not match required pattern: "
 msgstr "O valor fornecido não corresponde ao padrão exigido: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr "Não é possível serializar mais de 1000 itens de uma vez"
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr ""
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr ""
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr "Grupo invalido:{group}"
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr ""
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr "Chinês (tradicional)"
 msgid "Log in to the app"
 msgstr "Entrar no aplicativo"
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "E-mail"
 
@@ -391,19 +403,19 @@ msgstr ""
 msgid "Invalid choice"
 msgstr ""
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr ""
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Descrição"
 msgid "Description (optional)"
 msgstr ""
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr ""
 
@@ -510,28 +522,28 @@ msgstr ""
 msgid "Invalid value for overage"
 msgstr ""
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr ""
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr ""
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr ""
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr ""
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr ""
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr ""
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr ""
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr ""
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr ""
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr ""
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr ""
 msgid "Reference"
 msgstr ""
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr ""
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Referência do pedido de venda"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr ""
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr ""
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr ""
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr ""
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr ""
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr ""
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr ""
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr ""
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr ""
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr ""
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr ""
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr ""
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr ""
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr ""
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr ""
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr ""
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr ""
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr ""
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr ""
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr ""
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr ""
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr ""
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr ""
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr ""
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr ""
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr ""
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr ""
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "Quantidade necessária para o pedido de produção"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr ""
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr ""
 
@@ -1034,10 +1057,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr ""
 
@@ -1053,7 +1076,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "Alocar automaticamente os itens necessários com os números de série correspondentes"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr ""
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr "Cancelado"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr ""
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr ""
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Ativo"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr ""
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr ""
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr ""
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr ""
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr ""
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr ""
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr ""
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr ""
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr ""
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "Modelo"
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr ""
 
@@ -2415,7 +2438,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr ""
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr ""
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr ""
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr ""
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr ""
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr ""
 
@@ -3713,7 +3736,7 @@ msgstr ""
 msgid "Select supplier"
 msgstr ""
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr ""
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Arquivo de dados"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr ""
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr ""
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr ""
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr "Duplicar Pedido"
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr "ID do pedido inválido"
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr "Os seguintes números de série não estão disponíveis"
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr ""
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr ""
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr ""
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "Sobrenome do usuário"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr ""
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr ""
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr ""
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr ""
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr ""
 
diff --git a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po
index b2d59a4774..a7c80c577e 100644
--- a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Romanian\n"
 "Language: ro_RO\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr ""
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Utilizatorul nu are permisiunea de a vedea acest model"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr ""
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr ""
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr ""
 msgid "Provided value does not match required pattern: "
 msgstr ""
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr ""
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Număr de serie duplicat"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr ""
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr ""
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr ""
 
@@ -391,19 +403,19 @@ msgstr ""
 msgid "Invalid choice"
 msgstr ""
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr ""
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr ""
 msgid "Description (optional)"
 msgstr ""
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr ""
 
@@ -510,28 +522,28 @@ msgstr ""
 msgid "Invalid value for overage"
 msgstr ""
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr ""
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr ""
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr ""
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr ""
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr ""
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr ""
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr ""
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr ""
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr ""
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr ""
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr ""
 msgid "Reference"
 msgstr ""
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr ""
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr ""
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr ""
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr ""
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr ""
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr ""
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr ""
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr ""
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr ""
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr ""
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr ""
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr ""
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr ""
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr ""
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr ""
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr ""
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr ""
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr ""
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr ""
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr ""
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr ""
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr ""
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr ""
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr ""
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr ""
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr ""
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr ""
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr ""
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr ""
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr ""
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr ""
 
@@ -1034,10 +1057,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr ""
 
@@ -1053,7 +1076,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr ""
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr ""
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr ""
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr ""
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr ""
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr ""
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr ""
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr ""
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr ""
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr ""
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr ""
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr ""
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr ""
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr ""
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr ""
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr ""
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr ""
 
@@ -2415,7 +2438,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr ""
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr ""
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr ""
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr ""
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr ""
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr ""
 
@@ -3713,7 +3736,7 @@ msgstr ""
 msgid "Select supplier"
 msgstr ""
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr ""
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr ""
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr ""
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr ""
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr ""
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr ""
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr ""
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr ""
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr ""
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr ""
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr ""
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr ""
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr ""
 
diff --git a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po
index 733fbd0205..14260b33cb 100644
--- a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po
+++ b/src/backend/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: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Russian\n"
 "Language: ru_RU\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "Конечная точка API не обнаружена"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "У пользователя недостаточно прав для просмотра этой модели!"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "Невозможно преобразовать {original} в {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "недопустимое количество"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "Значение '{name}' отсутствует в формате ша
 msgid "Provided value does not match required pattern: "
 msgstr "Предоставленное значение не соответствует требуемому формату: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Пустая строка серийного номера"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Повторяющийся серийный номер"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "Диапазон группы {group} превышает допустимое количество ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Серийных номеров не найдено"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Число уникальных серийных номеров ({s}) должно соответствовать количеству ({q})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Удалить HTML теги из этого значения"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr "Китайский (Традиционный)"
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "EMail"
 
@@ -391,19 +403,19 @@ msgstr "Повторяющиеся имена не могут существов
 msgid "Invalid choice"
 msgstr "Неверный выбор"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Название"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Описание"
 msgid "Description (optional)"
 msgstr "Описание (необязательно)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Путь"
 
@@ -510,28 +522,28 @@ msgstr "Избыток не может превысить 100%"
 msgid "Invalid value for overage"
 msgstr "Неверное значение для избытка"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "Статсу заказа"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Родительский заказ на производство"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr "Деталь"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "Категория"
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "Заказ на производство должен быть отменен перед удалением"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "Расходники"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Необязательно"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "Производимая деталь"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Отслеживается"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Зарезервировано"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Доступно"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Заказ на производство"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Заказы на производство"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr "Сборка BOM не подтверждена"
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr "Порядок сборки не может быть создан для неактивной части"
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr "Порядок сборки не может быть создан для разблокированной части"
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Неверный выбор для родительской сборки"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "Должен быть указан ответственный пользователь или группа"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "Деталь заказа на производства не может быть изменена"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Ссылка на заказ на производство"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Ссылка на заказ на производство"
 msgid "Reference"
 msgstr "Отсылка"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "Краткое описание заказа на производство (необязательно)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "Заказ на производство, которому принадлежит этот заказ на производство"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Выберите деталь для производства"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Ссылка на заказ"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Заказ на продажу, которому принадлежит этот заказ на производство"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Место хранения - источник"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Выберите место хранения для этого заказа на производство (оставьте пустым, чтобы взять с любого места на складе)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Место хранения результата"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Выберите место хранения завершенных элементов"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Количество производимых деталей"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Количество складских позиций для производства"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Произведенные детали"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Количество складских позиций, которые были произведены"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Статус заказа на производство"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Код статуса заказа на производство"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Код партии"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Код партии для продукции"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Дата создания"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Целевая дата завершения"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Целевая дата для заказа на производства. Заказ будет просрочен после этой даты."
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Дата завершения"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "выполнено"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Создано"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "Пользователь, создавший этот заказ на производство"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Ответственный"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "Пользователь, ответственный за этот заказ на производство"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Внешняя ссылка"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Ссылка на внешний URL"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "Приоритет производства"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "Приоритет этого заказа на производство"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "Код проекта"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "Код проекта для этого заказа на производство"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr "Не удалось выгрузить задачу для распределения на сборку"
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "Заказ на производство {build} был завершен"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "Заказ на производство был завершен"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr "Для отслеживаемых частей должны быть указаны серийные номера"
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "Продукция не указана"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "Продукция уже произведена"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "Продукция не совпадает с заказом на производство"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "Количество должно быть больше нуля"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "Количество не может быть больше количества продукции"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "Сборка {serial} не прошла все необходимые тесты"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr "Номер позиции для производства"
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "Объект производства"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "Объект производства"
 msgid "Quantity"
 msgstr "Количество"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "Требуемое количество для заказа на производство"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "Элемент производства должен указать продукцию, как главную деталь помеченную как отслеживаемая"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "Резервируемое количество ({q}) не должно превышать доступное количество на складе ({a})"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "Складская позиция перераспределена"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "Резервируемое количество должно быть больше нуля"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "Количество должно быть 1 для сериализованных запасов"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "Выбранная складская позиция не соответствует позиции в BOM"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "Выбранная складская позиция не соответ
 msgid "Stock Item"
 msgstr "Складская позиция"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Исходная складская позиция"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Количество на складе для производства"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Установить в"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Целевая складская позиция"
 
@@ -1034,10 +1057,10 @@ msgstr "Введите серийные номера для продукции"
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Расположение"
 
@@ -1053,7 +1076,7 @@ msgstr "Автоматически выделить серийные номер
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "Автоматически зарезервировать необходимые элементы с соответствующими серийными номерами"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "Следующие серийные номера уже существуют или недействительны"
@@ -1082,10 +1105,10 @@ msgstr "Причина списания продукции"
 msgid "Location for completed build outputs"
 msgstr "Место хранения для завершенной продукции"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Статус"
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr "Деталь поставщика"
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr "Разрешить разновидности"
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "Позиция BOM"
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr "Зарезервированные Запасы"
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr "В заказе"
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr "В производстве"
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr "Внешний склад"
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "Доступный запас"
 
@@ -1356,7 +1379,7 @@ msgstr "Отменено"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Готово"
 
@@ -1405,536 +1428,536 @@ msgstr "Не указаны действительные коды валют"
 msgid "No plugin"
 msgstr "Нет плагина"
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "Обновлено"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "Временная метка последнего обновления"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "Уникальный код проекта"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "Описание проекта"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr "Пользователь или группа, ответственные за этот проект"
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "Значения настроек"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr "Выбранное значение не является допустимым"
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr "Значение должно быть булевым"
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr "Значение должно быть целым числом"
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr "Строка ключа должна быть уникальной"
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Пользователь"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "Цена"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr "Конечная точка"
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Активный"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr "Токен"
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr "Токен для доступа"
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "Секрет"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr "ID Сообщения"
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr "Хост"
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr "Заголовок"
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr "Тело"
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr "Работал над"
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr "Код"
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "Заголовок"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Ссылка"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "Опубликовано"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "Автор"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "Итого"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr "Читать"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "Изображение"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "Файл изображения"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr "Название единицы"
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr "Символ"
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr "Определение"
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Вложения"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Файл не найден"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Отсутствует внешняя ссылка"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Выберите файл для вложения"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Комментарий"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "Значение"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "Создано"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr "Последнее обновление"
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr "Данные"
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr "Контекст"
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr "Результат"
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr "Полученные элементы"
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr "Имя файла"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr "Скопировать параметры по шаблону катег
 msgid "Copy category parameter templates when creating a part"
 msgstr "Копировать параметры по шаблону категории при создании детали"
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "Шаблон"
@@ -2398,8 +2421,8 @@ msgstr "По умолчанию детали являются шаблонами
 msgid "Parts can be assembled from other components by default"
 msgstr "По умолчанию детали могут быть собраны из других компонентов"
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "Компонент"
 
@@ -2415,7 +2438,7 @@ msgstr "Можно купить"
 msgid "Parts are purchaseable by default"
 msgstr "По умолчанию детали являются отслеживаемыми"
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr "Можно продавать"
 
@@ -2619,8 +2642,8 @@ msgstr "Журнал ошибок отчета"
 msgid "Log errors which occur when generating reports"
 msgstr "Журнал ошибок, которые возникают при создании отчетов"
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Размер страницы"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "Производитель"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Компания"
 
@@ -3497,8 +3520,8 @@ msgstr "Контактный телефон"
 msgid "Contact email address"
 msgstr "Контактный EMail"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "Контакт"
 
@@ -3542,7 +3565,7 @@ msgstr "Является ли компания производителем де
 msgid "Default currency used for this company"
 msgstr "Для этой компании используется валюта по умолчанию"
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "Адрес"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr "Выберите производителя"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr "Связанная деталь производителя должна ссылаться на ту же базовую деталь"
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "Поставщик"
 
@@ -3713,7 +3736,7 @@ msgstr "Поставщик"
 msgid "Select supplier"
 msgstr "Выберите поставщика"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr "Код поставщика"
 
@@ -3733,7 +3756,7 @@ msgstr "Ссылка на сайт поставщика"
 msgid "Supplier part description"
 msgstr "Описание детали поставщика"
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr "Валюта по умолчанию для этого поставщи
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr "На складе"
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr "Размещены"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Файл данных"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr "Ошибки"
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr "Корректный"
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr "Копии"
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr "Подключен"
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr "Неизвестно"
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr "Печать"
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr "Расположение принтера"
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr "Ссылка на заказ"
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr "Невыполненный"
 
@@ -4125,7 +4168,7 @@ msgstr "Невыполненный"
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr "Создал"
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr "Имеет цену"
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr "Заказ"
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr "Внутренняя деталь"
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "Завершённые"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr "Заказ на закупку"
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr "Заказ на закупку"
 msgid "Sales Order"
 msgstr "Заказ на продажу"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr "Заказ на возврат"
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "Общая стоимость"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr "Валюта Заказа"
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr "Контакт не соответствует выбранной компании"
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr "Описание заказа (дополнительно)"
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr "Выберите код проекта для этого заказа"
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr "Ссылка на внешнюю страницу"
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "Целевая дата"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr "Пользователь или группа, ответственная за этот заказ"
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr "Ссылка на заказ"
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr "Компания, в которой детали заказываются"
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr "получил"
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr "Дата создания"
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr "Пользователь или группа, ответственная за этот заказ"
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr "Ссылка на заказ"
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr "Компания, в которой детали заказываются"
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr "получил"
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "Назначение"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "Покупатель"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr "Компания, которой детали продаются"
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr "Дата отгрузки"
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr "Отправлено"
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr "Количество"
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr "Записи о позиции"
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr "Описание позиции (необязательно)"
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr "Дополнительный контекст для этой строки"
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr "Цена за единицу"
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr "Деталь поставщика"
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr "Получено"
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr "Закупочная цена"
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "Цена продажи"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr "Цена последней продажи"
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Доставлено"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr "Отгруженное кол-во"
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr "Дата отправления"
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr "Дата доставки"
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr "Проверн"
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr "Отправление"
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr "Номер отправления"
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr "Номер отслеживания"
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr "Информация об отслеживании доставки"
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr "Номер счета"
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr "Отправка не имеет зарезервированных складских позиций"
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr "Складская позиция не была назначена"
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr "Невозможно зарезервировать складскую позицию в позицию другой детали"
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr "Количество должно быть 1 для сериализированных складских позиций"
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr "Строка"
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr "Элемент"
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr "Выберите складскую позицию для резервирования"
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr "Укажите резервируемое количество"
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr "Выберите позицию, возвращаемую от клиента"
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr "Дата получения"
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr "Результат"
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr "Позиция"
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr "Выберите место назначения для полученных элементов"
 
@@ -4811,7 +4854,7 @@ msgstr "Введите серийные номера для входящих с
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr "Для отслеживаемых деталей должно быть указано целочисленное количество"
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr "Статус складской позиции"
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr "Просроченные заказы на продажу"
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr "Остатки произведенные заказом на производство"
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr "Остатки требуемые для заказов на производство"
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr "Необходимо выбрать эту опцию"
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "Детали"
 
@@ -5235,7 +5274,7 @@ msgstr "Ключевые слова для улучшения видимости
 msgid "Part category"
 msgstr "Категория"
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr "Ревизия или серийный номер детали"
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr "Ревизия"
 
@@ -5276,7 +5315,7 @@ msgstr "Срок действия по умолчанию"
 msgid "Expiry time (in days) for stock items of this part"
 msgstr "Срок годности (в днях) для складских позиций этой детали"
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr "Минимальный запас"
 
@@ -5613,7 +5652,7 @@ msgstr "Описание теста"
 msgid "Enter description for this test"
 msgstr "Введите описание для этого теста"
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "Включено"
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr "Не выбрана ни одна деталь"
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr "Выберите категорию"
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr "Оригинальная деталь"
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr "Копировать Изображение"
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr "Скопировать BOM"
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr "Скопировать параметры"
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr "Копировать Записи"
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr "Скопировать записи из оригинальной детали"
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)"
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)"
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr "Код производителя"
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr "Название категории"
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr "Производится"
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr "Складские позиции"
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "Поставщики"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr "Общий запас"
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr "Дублировать деталь"
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr "Начальный запас"
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr "Копировать параметры категории"
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr "Копировать шаблоны параметров из выбранной категории деталей"
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr "Существующее изображение"
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr "Исключить складские позиции в внешних местах хранения"
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr "Создать отчет"
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr "Обновить детали"
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Проверка фонового работника не удалась"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr "Минимальная цена"
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr "Максимальная цена"
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr "Обновить"
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr "Можно произвести"
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr "Пропустить некорректные строки"
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr "Складская позиция зарезервирована зак
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr "Режим отладки"
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr "Пропустить Этикетки"
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr "Граница"
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr "Альбомная"
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr "Встроенный плагин"
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr "Плагин"
 
@@ -6801,21 +6940,21 @@ msgstr "Плагин"
 msgid "Method"
 msgstr "Метод"
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr "Автор не найден"
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr "Элементы"
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr "Правовая информация"
 msgid "Letter"
 msgstr "Письмо"
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr "Название шаблона"
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr "Описание шаблона"
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr "Номер ревизии (автоматически)"
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr "Шаблон имени файла"
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "Фильтры"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "Ширина [мм]"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "Высота [мм]"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr "Прогресс"
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr "Выходной файл"
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr "Сгенерированный выходной файл"
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr "Сниппет"
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr "Описание файла сниппета"
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr "Объект"
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr "Описание медиафайла"
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr "Код статуса"
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr "Древо Деталей"
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr "Залежалый"
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr "Необходимо указать количество"
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr "Выберите владельца"
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr "Складские позиции не могут находиться в структурных местах хранения, но могут находиться в дочерних местах хранения."
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr "Внешний"
 
@@ -8356,199 +8458,199 @@ msgstr "Заказы на продажу"
 msgid "Return Orders"
 msgstr "Заказы на возврат"
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr "Права доступа"
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "Группа"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "Вид"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "Разрешение на просмотр элементов"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr "Добавить"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "Разрешение на добавление элементов"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "Изменить"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "Разрешение на редактирование элементов"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "Удалить"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "Разрешение на удаление элементов"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Имя пользователя"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Имя"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "Имя пользователя"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Фамилия"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "Фамилия пользователя"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "Электронный адрес пользователя"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "Персонал"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr "Имеет ли этот пользователь права персонала"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr "Суперпользователь"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr "Это пользователь является суперпользователем"
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "Активна эта учетная запись"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "У вас недостаточно прав для изменения роли этого пользователя."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Только суперпользователи могут создавать новых пользователей"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "Ваша учётная запись была успешно создана."
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "Пожалуйста, используйте функцию сброса пароля для входа"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "Добро пожаловать в InvenTree"
 
diff --git a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po
index e1c78ec54d..eb73896271 100644
--- a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Slovak\n"
 "Language: sk_SK\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr ""
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr ""
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr ""
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr ""
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr ""
 msgid "Provided value does not match required pattern: "
 msgstr ""
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr ""
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr ""
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr ""
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr ""
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr ""
 
@@ -391,19 +403,19 @@ msgstr ""
 msgid "Invalid choice"
 msgstr ""
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr ""
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr ""
 msgid "Description (optional)"
 msgstr ""
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr ""
 
@@ -510,28 +522,28 @@ msgstr ""
 msgid "Invalid value for overage"
 msgstr ""
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr ""
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr ""
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr ""
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr ""
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr ""
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr ""
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr ""
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr ""
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr ""
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr ""
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr ""
 msgid "Reference"
 msgstr ""
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr ""
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr ""
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr ""
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr ""
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr ""
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr ""
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr ""
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr ""
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr ""
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr ""
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr ""
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr ""
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr ""
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr ""
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr ""
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr ""
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr ""
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr ""
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr ""
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr ""
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr ""
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr ""
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr ""
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr ""
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr ""
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr ""
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr ""
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr ""
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr ""
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr ""
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr ""
 
@@ -1034,10 +1057,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr ""
 
@@ -1053,7 +1076,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr ""
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr ""
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr ""
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr ""
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr ""
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr ""
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr ""
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr ""
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr ""
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr ""
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr ""
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr ""
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr ""
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr ""
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr ""
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr ""
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr ""
 
@@ -2415,7 +2438,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr ""
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr ""
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr ""
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr ""
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr ""
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr ""
 
@@ -3713,7 +3736,7 @@ msgstr ""
 msgid "Select supplier"
 msgstr ""
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr ""
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr ""
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr ""
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr ""
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr ""
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr ""
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr ""
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr ""
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr ""
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr ""
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr ""
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr ""
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr ""
 
diff --git a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po
index 52da9be0f5..8dd27c60ca 100644
--- a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Slovenian\n"
 "Language: sl_SI\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "API vmesnik ni najden"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Uporabnik nima dovoljenja pogleda tega modela"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "Ni mogoče pretvoriti {original} v {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Podana napačna količina"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "Vrednost '{name}' ni v predpisanem formatu"
 msgid "Provided value does not match required pattern: "
 msgstr "Podana vrednost se ujema s predpisanim vzorcem: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Prazno polje serijske številke"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Dvojna serijska številka"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "Doseg skupine {group} presega dovoljene količine ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Serijske številke niso najdene"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Število unikatnih serijskih številk ({len(serials)}) se mora ujemati s količino ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Odstranite oznako HTML iz te vrednosti"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr "Kitajščina (tradicionalno)"
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "E-pošta"
 
@@ -391,19 +403,19 @@ msgstr "Podvojena imena ne morejo obstajati pod istim nadrejenim elementom"
 msgid "Invalid choice"
 msgstr "Nedovoljena izbira"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Ime"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Opis"
 msgid "Description (optional)"
 msgstr "Opis (opcijsko)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Pot"
 
@@ -510,28 +522,28 @@ msgstr "Prestarost ne sme presegati 100%"
 msgid "Invalid value for overage"
 msgstr "Neveljavna vrednost za prestarost"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Nadrejena izgradnja"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr "Del"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "Izgradnja mora biti najprej preklicana, nato je lahko izbrisana"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Neobvezno"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "Montaža"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Sledi"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr "Testno"
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Dodeljeno"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Na voljo"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Nalog izgradnje"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Nalogi izgradnje"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr "Sestava BOM ni bila potrjena"
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Neveljavna izbira za nadrejeno izgradnjo"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "Naveden mora biti odgovorni uporabnik ali skupina"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Referenca naloga izgradnje"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Referenca naloga izgradnje"
 msgid "Reference"
 msgstr "Referenca"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "Nalog izgradnje na katerega se ta izgradnaj nanaša"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Izberite del za izgradnjo"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Referenca dobavnica"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Dobavnica na katero se navezuje ta izgradnja"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Lokacija vira"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Izberite lokacijo dela za to izgradnjo (v primeru da ni pomembno pusti prazno)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Ciljna lokacija"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Izberite lokacijo, kjer bodo končne postavke shranjene"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Količina izgradenj"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Število postavk za izgradnjo"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Končane postavke"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Število postavk zaloge, ki so bile končane"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Status izgradnje"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Koda statusa izgradnje"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Številka serije"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Številka serije za to izgradnjo"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Datum ustvarjenja"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Rok dokončanja"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Rok končanja izdelave. Izdelava po tem datumu bo v zamudi po tem datumu."
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Datom končanja"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "dokončal"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Izdal"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "Uporabnik, ki je izdal nalog za izgradnjo"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Odgovoren"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "Odgovorni uporabnik ali skupina za to naročilo"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Zunanja povezava"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Zunanja povezava"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "Nalog izgradnje {build} je dokončan"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "Nalog izgradnej dokončan"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "Ni določena izgradnja"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "Igradnja je že dokončana"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "Izgradnja se ne ujema s nalogom izdelave"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr "Količina"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "Izdelana postavka mora imeti izgradnjo, če je glavni del označen kot sledljiv"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "Prestavljena zaloga ({q}) ne sme presegati zaloge ({a})"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "Preveč zaloge je prestavljene"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "Prestavljena količina mora biti večja od 0"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "Količina za zalogo s serijsko številko mora biti 1"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr "Postavka zaloge"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Izvorna postavka zaloge"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Količina zaloge za prestavljanje za izgradnjo"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Inštaliraj v"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Destinacija postavke zaloge"
 
@@ -1034,10 +1057,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr ""
 
@@ -1053,7 +1076,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr ""
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr ""
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr "Preklicano"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Končano"
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Uporabnik"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Aktivno"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Povezava"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr ""
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Priloga"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Manjka datoteka"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Manjka zunanja povezava"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Izberite prilogo"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Komentar"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr ""
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr "Ime datoteke"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr ""
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr ""
 
@@ -2415,7 +2438,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr ""
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr ""
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr ""
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr ""
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr ""
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr ""
 
@@ -3713,7 +3736,7 @@ msgstr ""
 msgid "Select supplier"
 msgstr ""
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr "Postavljeno"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Podatki datoteke"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr ""
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr ""
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Poslano"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr ""
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Nadzor dela v ozadju neuspel"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr ""
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Uporabniško ime"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Ime"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "Ime uporabnika"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Priimek"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "Priimek uporabnika"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "Email uporabnika"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "Osebje"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr "Ali ima ta uporabnik pravice osebja"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr "Superuporabnik"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr "Ali je ta uporabnik superuporabnik"
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "Ali je ta račun aktiven"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "Nimate dovoljenja za spreminjanje vloge tega uporabnika."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Samo superuporabniki lahko ustvarijo nove uporabnike"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "Vaš račun je bil ustvarjen."
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "Za prijavo uporabite funkcijo ponastavitve gesla"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "Dobrodošli v InvenTree"
 
diff --git a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po
index 7794acffe0..33c4ddb146 100644
--- a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Serbian (Latin)\n"
 "Language: sr_CS\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "API krajnja tačka nije pronađena"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr "Lista nevalidiranih stavki"
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr "Dati su neispravni filteri"
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
-msgstr "Nisu pronađene stavke za brisanje"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
+msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Korisnik nema dozvolu za pregled ovog modela"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "Nije moguće konvertovati {original} u {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Isporučena nevažeća količina"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr "Neispravna decimalna vrednost"
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "Vrednost '{name}' se ne pojavljuje u formatu obrasca"
 msgid "Provided value does not match required pattern: "
 msgstr "Navedena vrednost ne odgovara traženom obrascu: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr "Nije moguće dati više od 1000 serijskih brojeva stavkama odjednom"
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Serijski broj nije popunjen"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Dupliciraj serijski broj"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr "Nevažeća grupa: {group}"
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "Raspon grupe {group} prelazi dozvoljenu količinu ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Nisu pronađeni serijski brojevi"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Broj jedinstvenih serijskih brojeva ({len(serials)}) mora odgovarati količini ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Uklonite HTML oznake iz ove vrednosti"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr "Podatak sadrži zabranjen jezički sadržaj"
 
@@ -339,7 +351,7 @@ msgstr "Kineski (Tradicionalni)"
 msgid "Log in to the app"
 msgstr "Prijavljivanje na aplikaciju"
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "E-Pošta"
 
@@ -391,19 +403,19 @@ msgstr "Dvostruka imena ne mogu postojati pod istom nadredjenom grupom"
 msgid "Invalid choice"
 msgstr "Nevažeći izvor"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Ime"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Opis"
 msgid "Description (optional)"
 msgstr "Opis (Opciono)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Putanja"
 
@@ -510,28 +522,28 @@ msgstr "Ukupna vrednost ne sme da prelazi 100%"
 msgid "Invalid value for overage"
 msgstr "Nevažeća ukupna vrednost"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "Status naloga"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Roditeljski proizvod"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr "Uključi varijante"
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr "Uključi varijante"
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr "Uključi varijante"
 msgid "Part"
 msgstr "Deo"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "Kategorija"
 
@@ -612,90 +623,102 @@ msgstr "Završeno pre"
 msgid "Completed after"
 msgstr "Završeno nakon"
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr "Ne uključuj stablo"
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "Proizvod mora biti poništen pre nego što se izbriše"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "Potrošni materijal"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Opciono"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "Sklapanje"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Praćeno"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr "Proverljivo"
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr "Neizmirena narudžbina"
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Alocirano"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Dostupno"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Nalog za izradu"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Nalozi za izradu"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr "BOM za sastavljanje nije potvrđeno"
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr "Nalog za izradu se ne može kreirati za neaktivan deo"
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr "Nalog za izradu se ne može kreirati za zaključan deo"
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Nevažeći izbor za nadređenu verziju"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "Odgovorni korisnik ili grupa mora biti određena"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "Deo u nalogu za izradu ne može se izmeniti"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Reference naloga za pravljenje"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Reference naloga za pravljenje"
 msgid "Reference"
 msgstr "Referenca"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "Kratak opis izrade (nije obavezno)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "Nalog za izradu za koju je ova izrada alocirana"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Izaberi deo za izgradnju"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Referenca naloga za prodaju"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Nalog za prodaju za koju je ova izrada alocirana"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Lokacija izvora"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Izaberi lokaciju zaliha za ovu izgradnju (ostaviti prazno ako hoćete bilo koju lokaciju zaliha"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Lokacija odredišta"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Izaberi lokaciju gde će se završene stavke skladištiti"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Količina izgradnje"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Broj stavki za izgradnju"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Kompletirane stavke"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Broj stavki u zalihama koje su kompletirane"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Status izgradnje"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Kod statusa izgradnje"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Kod serije"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Kod izgradnje za ovaj izlaz"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "datum kreiranja"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Datum ciljanog završetka"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Ciljani datum za završetak izgradnje. Izgradnja će biti u prekoračenju nakon ovog datuma"
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Datum završetka"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "kompletirano od "
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "izdato od"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "Korisnik koji je izdao nalog za izgradnju"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Odgovoran"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "Korisnik ili grupa koja je odgovorna za ovaj nalog za izgradnju"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Spoljašnja konekcija"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Link za eksterni URL"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "Prioritet izgradnje"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "Prioritet ovog naloga za izgradnju"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "Kod projekta"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "Kod projekta za ovaj nalog za izgradnju"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr "Nije uspelo preuzimanje zadataka da bi se dovršila alokacija izgradnje"
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "Nalog za izgradnju {build} je kompletiran"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "Nalog za izgradnju je kompletiran"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr "Za delove koji mogu da se prate moraju se dostaviri serijski brojevi"
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "Nije određen izlaz izgradnje"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "Izlaz izgradnje je već kompletiran"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "Izlaz izgradnje se ne slaže sa Nalogom za izgradnju"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "Količina mora biti veća od nule"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "Količina ne sme da bude veća od izlazne količine"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "Izlaz izgradnje {serial} nije zadovoljio zahtevane testove"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr "Stavka porudžbine naloga za izgradnju"
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "Objekat izgradnje"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "Objekat izgradnje"
 msgid "Quantity"
 msgstr "Količina"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "Potrebna količina za nalog za izgradnju"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "Stavka izgradnje mora imati izlaz izgradnje, jer je nadređeni deo markiran da može da se prati"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "Alocirana količina ({q}) ne sme da bude veća od količine dostupnih zaliha ({a})"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "Stavka zaliha je prealocirana"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "Količina alokacije mora da bude veća od nule"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "Količina mora da bude 1 za zalihe koje su serijalizovane"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "Izabrana stavka zaliha se ne slaže sa porudžbinom sa spiska materijala"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "Izabrana stavka zaliha se ne slaže sa porudžbinom sa spiska materijala
 msgid "Stock Item"
 msgstr "Stavka zaliha"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Izvor stavke zaliha"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Količina zaliha za alociranje za izgradnju"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Ugradi u"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Stavka zaliha odredišta"
 
@@ -1034,10 +1057,10 @@ msgstr "Unesi serijske brojeve za izlaz izgradnje"
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Lokacija"
 
@@ -1053,7 +1076,7 @@ msgstr "Automatski alociraj serijske brojeve"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "Automatski alociraj tražene stavke sa odgovarajućim serijskim brojevima"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "Sledeći serijski brojevi već postoje ili su neispravni"
@@ -1082,10 +1105,10 @@ msgstr "Razlog za otpisane izlaz(e) izgradnje"
 msgid "Location for completed build outputs"
 msgstr "Lokacija za završene izlaze izgradnje"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Status"
 
@@ -1270,8 +1293,8 @@ msgstr "BOM ime dela"
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr "Deo dobavljača"
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr "Dozvoli varijante"
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "BOM stavka"
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr "Alocirane zalihe"
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr "Po narudžbini"
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr "U proizvodnji"
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr "Spoljašnje zalihe"
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "Dostupne zalihe"
 
@@ -1356,7 +1379,7 @@ msgstr "Otkazano"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Gotovo"
 
@@ -1405,536 +1428,536 @@ msgstr "Nisu obezbeđeni ispravni kodovi valuta"
 msgid "No plugin"
 msgstr "Nema dodataka"
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "Ažurirano"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "Vreme poslednjeg ažuriranja"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "Jedinstveni kod projekta"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "Opis projekta"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr "Korisnik ili grupa odgovorni za ovaj projkat"
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr "Ključ za podešavanje"
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "Vrednost podešavanja"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr "Izabrana vrednost nije ispravna opcija"
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr "Vrednost mora da bude boolean tipa"
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr "Vrednost mora da bude integer tipa"
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr "Vrednost mora biti broj"
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr "Vrednost ne prolazi test ispravnosti"
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr "Tekstualni ključ mora da bude jedinstven"
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Korisnik"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr "Prelomna količina cene"
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "Cena"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr "Cena jedinice za određenu količinu"
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr "Krajnja tačka"
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr "Krajnja tačka na kojoj je primljen zahtev za izmenu web stranice"
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr "Ime ovog zahteva za izmenu stranice"
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Aktivan"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr "Da li je ovaj zahtev za izmenu aktivan?"
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr "Token"
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr "Token za pristup"
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "Tajna"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr "Deljena tajna za HMAC"
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr "ID poruke"
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr "Jedinstveni identifikator za ovu poruku"
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr "Računar"
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr "Računar koji je primio ovu poruku"
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr "Zaglavlje"
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr "Zaglavlje ove poruke"
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr "Telo"
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr "Telo ove poruke"
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr "Krajnja tačka na kojoj je ova poruka primljena"
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr "Radilo se na "
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr "Da li je rad sa ovom porukom završen?"
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr "Id"
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "Naslov"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Link"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "Objavljeno"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "Autor"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "Rezime"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr "Čitaj"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr "Da li je ova stavka vesti pročitana"
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "Slika"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "Datoteka slike"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr "Ciljni tip modela za ovu sliku"
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr "Ciljni ID modela za ovu sliku"
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr "Posebna jedinica"
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr "Simbol jedinice mora biti jedinstven"
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr "Ime jedinice mora da bude ispravan identifikator"
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr "Ime jedinice"
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr "Simbol"
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr "Opcioni simbol  jedinice"
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr "Definicija"
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr "Definicija jedinice"
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Prilog"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Nedostaje datoteka"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Nedostaje eksterni link"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Izaberite datoteku za prilog"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Komentar"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr "Komentar priloga"
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr "Datum učitavanja"
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr "Datum kada je datoteka učitana"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr "Veličina datoteke"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr "Veličina datoteke u bajtovima"
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr "Određen je neispravan tip modela za prilog"
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr "Posebno stanje"
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr "Posebna stanja"
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr "Referentni status podešen"
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr "Status je podešen i produžen je sa ovim posebnim stanjem"
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr "Logički ključ"
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr "Stanje logičkog ključa je jednako posebnom ključu u poslovnoj logici"
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "Vrednost"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr "Numerička vrednost koja će biti sačuvana u bazi podataka modela"
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr "Ime stanja"
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr "Etiketa"
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr "Etiketa koja će biti prikazana na korisničkoj strani"
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr "Boja"
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr "Boja koja će biti prikazana na korisničkoj strani"
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr "Model"
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr "Model ovog stanja je povezan sa "
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr "Model mora biti izabran"
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr "Ključ mora biti izabran"
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr "Logički ključ  mora biti izabran"
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr "Ključ mora da se razlikuje od logičkog ključa"
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr "Validna referenca statusa klase mora biti dostavljena"
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr "Ključ mora biti različit od logičkog ključa referentnog statusa"
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr "Logički ključ mora biti među logičkim ključevima referentnog statusa"
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr "Naziv mora biti različit od naziva u statusu reference"
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr "Lista odabira"
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr "Liste odabira"
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr "Ime liste odabira"
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr "Opis liste odabira"
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr "Zaključano"
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr "Da li je ova lista odabira zaključana?"
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr "Da li se ova lista odabira može koristiti?"
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr "Ekstenzija/dodatak za izvor"
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr "Ekstenzija koja pruža listu odabira"
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr "String izvora"
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr "Opcioni string koji identifikuje izvor koji se koristi za ovu listu"
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr "Podrazumevani unos"
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr "Podrazumevani unos za ovu listu odabira"
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "Kreirano"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr "Datum i vreme kada je ova lista odabira kreirana"
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr "Poslednje ažuriranje"
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr "Datum i vreme kada je ova lista odabira ažurirana"
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr "Unos liste odabira"
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr "Unosi liste odabira"
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr "Lista odabira kojoj ovaj unos pripada"
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr "Vrednost ovog unosa liste odabira"
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr "Naziv ovog unosa liste odabira"
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr "Opis ovog unosa liste odabira"
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr "Da li je unos ove liste odabira aktivan?"
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr "Skeniranje bar koda"
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr "Podaci"
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr "Podaci bar koda"
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr "Korisnik koji je skenirao bar kod"
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr "Vremenski trag"
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr "Datum i vreme skeniranja bar koda"
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr "URL krajnja tačka kojaj je obradila bar kod"
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr "Kontekst"
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr "Kontekst podataka za skeniranje bar koda"
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr "Odgovor"
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr "Podaci odgovora za skeniranje bar koda"
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr "Rezultat"
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr "Da li je skeniranje bar koda bilo uspešno?"
 
@@ -1956,7 +1979,7 @@ msgstr "{verbose_name} poništeno"
 msgid "A order that is assigned to you was canceled"
 msgstr "Narudžbina koja je bila dodeljena vama je otkazana"
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr "Stavke primljene"
 
@@ -2036,7 +2059,7 @@ msgstr "Ključne reči argumenata zadatka"
 msgid "Filename"
 msgstr "Ime datoteke"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr "Tip modela"
 
@@ -2384,8 +2407,8 @@ msgstr "Kopiraj šablone parametara kategorije"
 msgid "Copy category parameter templates when creating a part"
 msgstr "Kopiraj šablone parametara kategorije prilikom pravljenja dela"
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "Šablon"
@@ -2398,8 +2421,8 @@ msgstr "Podrazumevano je da su delovi šabloni"
 msgid "Parts can be assembled from other components by default"
 msgstr "Podrazumevano je da se delovi mogu sastavljati od drugih komponenti"
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "Komponenta"
 
@@ -2415,7 +2438,7 @@ msgstr "Može da se kupi"
 msgid "Parts are purchaseable by default"
 msgstr "Podrazumevano je da se delovi mogu kupiti"
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr "Može da se proda"
 
@@ -2619,8 +2642,8 @@ msgstr "Greške evidencije izveštaja"
 msgid "Log errors which occur when generating reports"
 msgstr "Greške evidentiranja koje se dese prilikom generisanja izveštaja"
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Veličina stranice"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr "Dobavljač je aktivan"
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "Proizvođač"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Kompanija"
 
@@ -3497,8 +3520,8 @@ msgstr "Broj telefona kontakta"
 msgid "Contact email address"
 msgstr "Email adresa kontakta"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "Kontakt"
 
@@ -3542,7 +3565,7 @@ msgstr "Da li ova kompanija proizvodi delove?"
 msgid "Default currency used for this company"
 msgstr "Podrazumevana valuta za ovu kompaniju"
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "Adrese"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr "Izaberi proizvođača"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr "Broj dela proizvođača"
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr "Povezani delovi dobavljača moraju referencirati isti osnovni deo"
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "Dobavljač"
 
@@ -3713,7 +3736,7 @@ msgstr "Dobavljač"
 msgid "Select supplier"
 msgstr "Izaberi dobavljača"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr "Jedinica za držanje dobavljačevih zaliha"
 
@@ -3733,7 +3756,7 @@ msgstr "URL za link dela eksternog dobavljača"
 msgid "Supplier part description"
 msgstr "Opis dela dobavljača"
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr "Podrazumevana valuta koja se koristi za ovog dobavljača"
 msgid "Company Name"
 msgstr "Naziv kompanije"
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr "Na zalihama"
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr "Prilagođen ključ statusa"
@@ -3841,10 +3888,6 @@ msgstr "Postavljen"
 msgid "Invalid status code"
 msgstr "Nevažeći statusni kod"
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr "Nevažeći format za izvoz"
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Datoteka"
@@ -3925,7 +3968,7 @@ msgstr "Originalni podaci vrste"
 msgid "Errors"
 msgstr "Greške"
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr "Važeće"
 
@@ -4013,51 +4056,51 @@ msgstr "Fajl sa podacima sadrži previše vrsta"
 msgid "Value must be a valid dictionary object"
 msgstr "Vrednosti moraju biti validni objekti"
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr "Kopije"
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr "Broj kopija za štampanje od svakog natpisa"
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr "Konektovano"
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr "Nepoznato"
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr "Štampanje"
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr "Nema medijuma"
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr "Papir zaglavljen"
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr "Diskonektovano"
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr "Štampač natpisa"
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr "Direktno štampaj natpise za razne stavke"
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr "Lokacija štampača"
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr "Podesi štampač na specifičnu lokaciju"
 
@@ -4117,7 +4160,7 @@ msgstr "Tip konfiguracije"
 msgid "Order Reference"
 msgstr "Referenca naloga"
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr "Izvanredno"
 
@@ -4125,7 +4168,7 @@ msgstr "Izvanredno"
 msgid "Has Project Code"
 msgstr "Ima šifru projekta"
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr "Kreirano do strane"
 
@@ -4161,53 +4204,53 @@ msgstr "Krajnji datum pre"
 msgid "Target Date After"
 msgstr "Krajnji datum nakon"
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr "Ima cenu"
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr "Završen pre"
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr "Završen nakon"
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr "Nalog"
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr "Nalog završen"
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr "Interni deo"
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr "Nalog na čekanju"
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "Završeno"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr "Ima isporuku"
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr "Nalog za kupovinu"
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr "Nalog za kupovinu"
 msgid "Sales Order"
 msgstr "Nalog za prodaju"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr "Nalog za vraćanje"
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "Ukupna cena"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr "Totalna cena ovog naloga"
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr "Valuta naloga"
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr "Valuta za ovaj nalog (ostaviti prazno za podrazumevanu valutu kompanije)"
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr "Kontakt se ne poklapa sa izabranom kompanijom"
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr "Opis naloga (opciono)"
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr "Izaberi šifru projekta za ovaj nalog"
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr "Link ka eksternoj stranici"
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "Ciljani datum"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr "Očekivani datum za isporuku. Nalog će biti zastareo nakon ovog datuma."
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr "Korisnik ili grupa odgovorni za ovaj nalog"
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr "Lice za kontakt za ovaj nalog"
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr "Adresa kompanije za ovaj nalog"
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr "Referenca naloga"
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr "Status naloga za kupovinu"
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr "Kompanija od koje su stavke naručene"
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr "Referenca dobavljača"
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr "Referentni kod dobavljača naloga"
-
-#: order/models.py:584
-msgid "received by"
-msgstr "primljeno od strane"
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr "Datum izdavanja"
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr "Datum kada je nalog izdat"
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr "Korisnik ili grupa odgovorni za ovaj nalog"
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr "Lice za kontakt za ovaj nalog"
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr "Adresa kompanije za ovaj nalog"
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr "Referenca naloga"
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr "Status naloga za kupovinu"
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr "Kompanija od koje su stavke naručene"
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr "Referenca dobavljača"
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr "Referentni kod dobavljača naloga"
+
+#: order/models.py:546
+msgid "received by"
+msgstr "primljeno od strane"
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr "Datum kada je nalog završen"
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "Odredište"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr "Odredište za primljene stavke"
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr "Dobavljač dela se mora poklapati sa dobavljačem naloga za kupovinu"
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr "Količina mora biti pozitivan broj"
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "Mušterija"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr "Kompanija kojoj se prodaju stavke"
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr "Status naloga za prodaju"
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr "Referenca mušterije"
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr "Referentni kod mušterijinog naloga"
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr "Datum isporuke"
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr "isporučeno od strane"
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr "Nalog je već završen"
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr "Nalog je već otkazan"
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr "Samo otvoren nalog može biti označen kao završen"
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr "Nalog ne može biti završen jer ima nepotpunih isporuka"
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr "Nalog ne može biti završen jer ima nepotpunih alokacija"
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr "Nalog ne može biti završen jer ima nezavršenih stavki porudbžine"
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr "Količina stavki"
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr "Referenca stavke porudbžine"
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr "Beleške stavke porudbžine"
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr "Krajnji datum za ovu stavku porudbćine (ostaviti prazno za krajnji datum sa naloga)"
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr "Opis stavke porudžbine (opciono)"
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr "Dodatni kontekst za ovu porudžbinu"
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr "Cena jedinice"
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr "Stavka porudžbine naloga za kupovinu"
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr "Deo dobavljača se mora poklapati sa dobavljačem"
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr "Deo dobavljača"
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr "Primljeno"
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr "Broj primljenih stavki"
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr "Kupovna cena"
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr "Kupovna cena jedinice"
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr "Dodatna porudbžina naloga za kupovinu"
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr "Stavka porudžbine naloga za prodaju"
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr "Virtuelni deo ne može biti dodeljen nalogu za prodaju"
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr "Samo delovi koji se mogu prodati mogu biti dodeljeni nalogu za prodaju"
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "Prodajna cena"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr "Prodajna cena jedinice"
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Poslato"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr "Isporučena količina"
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr "Isporuka naloga za prodaju"
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr "Datum isporuke"
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr "Datum dostavljanja"
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr "Datum dostavljanja isporuke"
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr "Provereno od strane"
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr "Korisnik koji je proverio ovu isporuku"
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr "Isporuka"
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr "Broj isporuke"
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr "Broj praćenja"
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr "Informacije o praćenju isporuke"
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr "Broj računa"
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr "Referentni broj za dodeljeni račun"
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr "Isporuka je već poslata"
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr "Isporuka nema alocirane stavke sa zaliha"
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr "Dodatne porudbžine naloga za prodaju"
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr "Alokacije naloga za prodaju"
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr "Stavka sa zaliha nije dodeljena"
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr "Ne mogu se alocirati stavke sa zaliha porudbžini sa drugačijim delom"
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr "Ne mogu se alocirati zalihe porudbžini bez dela"
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr "Alocirana količina ne sme da pređe količinu zaliha"
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr "Količina mora biti 1 za serijalizovane stavke sa zaliha"
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr "Nalog za prodaju se ne poklapa sa isporukom"
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr "Isporuka se ne poklapa sa nalogom za prodaju"
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr "Porudbžina"
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr "Referenca isporuke naloga za prodaju"
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr "Stavka"
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr "Izaberi stavku sa zaliha za alokaciju"
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr "Unesi količinu za alokaciju zaliha"
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr "Referenca naloga za vraćanje"
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr "Kompanija čije stavke su vraćene"
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr "Status naloga za vraćanje"
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr "Vrati stavku porudbžine"
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr "Stavka sa zaliha mora biti određena"
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr "Količina vraćanja je premašila količinu zaliha"
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr "Količina vraćanja mora biti veća od nule"
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr "Nevažeća količina za serijalizovane stavke sa zaliha"
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr "Izaberi stavku za vraćanje od mušterije"
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr "Primljeno datuma"
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr "Datum kada je ova vraćena stavka primljena"
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr "Ishod"
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr "Ishod za ovu stavku porudžbine"
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr "Trošak asociran sa popravkom ili vraćanjem ove stavke porudžbine"
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr "Doda"
 
@@ -4707,7 +4750,7 @@ msgstr "Dupliraj nalog"
 msgid "Specify options for duplicating this order"
 msgstr "Odredi opcije za dupliranje ovog naloga"
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr "Nevažeći ID naloga"
 
@@ -4751,7 +4794,7 @@ msgstr "Spoj stavke"
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr "Spoj stavke sa istim delom, odredištem i ciljanim datumom u jednu stavku porudžbine"
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr "Jedinica za praćenje zaliha"
 
@@ -4787,7 +4830,7 @@ msgstr "Stavka porudbžine"
 msgid "Line item does not match purchase order"
 msgstr "Stavka porudžbine se ne poklapa sa nalogom za kupovinu"
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr "Izaberi odredišnu lokaciju za primljene stavke"
 
@@ -4811,7 +4854,7 @@ msgstr "Unesi serijske brojeve za nadolazeće stavke sa zaliha"
 msgid "Override packaging information for incoming stock items"
 msgstr "Promeni informacije o pakovanju za nadolazeće stavke sa zaliha"
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr "Dodatne beleške za nadolazeće stavke sa zaliha"
 
@@ -4831,7 +4874,7 @@ msgstr "Bar kod je već u upotrebi"
 msgid "An integer quantity must be provided for trackable parts"
 msgstr "Celobrojna količina mora biti dostavljena za delove koje je moguće pratiti"
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr "Stavke porudžbine moraju biti dostavljene"
 
@@ -4891,32 +4934,32 @@ msgstr "Nema pronađenih poklapanja za sledeće serijske brojeve"
 msgid "The following serial numbers are unavailable"
 msgstr "Sledeći serijski brojevi su nedostupni"
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr "Stavka porudžbine naloga za vraćanje"
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr "Statusni kod stavke sa zaliha"
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr "Stavka porudžbine se ne poklapa sa nalogom za vraćanje"
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr "Stavka porudžbine je već primljena"
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr "Stavke se mogu primiti samo na osnovu naloga koji su u toku"
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr "Količina za vraćanje"
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr "Valuta cene porudžbine"
 
@@ -4970,107 +5013,103 @@ msgstr "Istekli nalozi za prodaju"
 msgid "Sales order {so} is now overdue"
 msgstr "Nalog za prodaju {so} je sada istekao"
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr "Označeno zvezdicom"
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr "Filtiraj po kategorijama označenim zvezdicom"
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr "Dubina"
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr "Filtriraj po dubini kategorije"
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr "Vrhovni"
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr "Filtriraj po vrhovnim kategorijama"
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr "Kaskadno"
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr "Uključi pod-kategorije u filtriranim rezultatima"
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr "Nadređen"
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr "Filtriraj po nadređenoj kategoriji"
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr "Ne uključuj stablo"
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr "Ne uključuj pod-kategorije pod specifičnom kategorijom"
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr "Ima rezultate"
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr "Dolazeći nalozi za kupovinu"
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr "Odlazeći nalozi za prodaju"
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr "Zalihe proizvedene od strane naloga za izradu"
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr "Zalihe potrebne za nalog za izradu"
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr "Validiraj ceo spisak materijala"
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr "Ova opcija mora biti selektovana"
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr "Je revizija"
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr "Ima revizije"
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr "Spisak materijala validan"
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr "Deo sklopa se može testirati"
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr "Deo komponente se može testirati"
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr "Koristi"
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr "Ova kategorija dela se ne može podesiti kao strukturna jer već ima dodeljene neke delove!"
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "Delovi"
 
@@ -5235,7 +5274,7 @@ msgstr "Ključne reči dela da bi se poboljšala vidljivost u rezultatima pretra
 msgid "Part category"
 msgstr "Kategorija dela"
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr "Interni broj dela"
@@ -5244,7 +5283,7 @@ msgstr "Interni broj dela"
 msgid "Part revision or version number"
 msgstr "Revizija dela ili broj verzije"
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr "Revizija"
 
@@ -5276,7 +5315,7 @@ msgstr "Podrazumevani istek"
 msgid "Expiry time (in days) for stock items of this part"
 msgstr "Vreme isteka (u danima) za stavke sa zaliha ovog dela"
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr "Minimalne zalihe"
 
@@ -5613,7 +5652,7 @@ msgstr "Opis testa"
 msgid "Enter description for this test"
 msgstr "Unesi opis za ovaj test"
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "Omogućen"
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr "Broj delova koji koriste ovaj šablon"
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr "Nema izabranih delova"
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr "Izaberi kategoriju"
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr "Originalni deo"
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr "Izaberi originalni deo za duplikaciju"
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr "Kopiraj sliku"
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr "Kopiraj sliku sa originalnog dela"
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr "Kopiraj spisak materijala"
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr "Kopiraj spisak materijala sa originalnog dela"
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr "Kopiraj parametre"
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr "Kopiraj parametarske podatke sa originalnog dela"
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr "Kopiraj beleške"
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr "Kopiraj beleške sa originalnog dela"
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr "Inicijalna količina zaliha"
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr "Odredi inicijalnu količinu zaliha za ovaj deo. Ukoliko je količina nula, neće biti dodate zalihe."
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr "Inicijalna lokacija zaliha"
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr "Odredi inicijalnu lokaciju zaliha za ovaj deo"
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr "Izaberi dobavljača (ostavi prazno za preskakanje)"
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr "Izaberi proizvođača (ostavi prazno za preskakanje)"
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr "Broj dela proizvođača"
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr "Izabrana kompanija nije validan dobavljač"
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr "Izabrana kompanija nije validan proizvođač"
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr "Deo proizvođača koji se poklapa sa ovim brojem dela proizvođača već postoji"
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr "Deo dobavljača koji se opklapa sa ovim brojem dela dobavljača već postoji"
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr "Naziv kategorije"
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr "Izrađivanje"
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr "Stavke sa zaliha"
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr "Revizije"
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "Dobavljači"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr "Ukupne zalihe"
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr "Nealocirane zalihe"
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr "Varijante zaliha"
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr "Dupliraj deo"
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr "Kopiraj inicijalne podatke od drugog dela"
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr "Početne zalihe"
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr "Kreiraj deo sa početnom količinom zaliha"
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr "Informacije o dobavljaču"
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr "Dodaj inicijalne informacije o dobavljaču za ovaj deo"
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr "Kopiraj parametre kategorije"
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr "Kopiraj parametarske šablone sa izabrane kategorije dela"
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr "Postojeća slika"
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr "Ime fajla postojeće slike dela"
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr "Fajl sa slikom ne postoji"
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr "Ograniči izveštaj o popisu na određeni deo, kao i na bilo koje varijante delova"
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr "Ograniči izveštaj o popisu na određenu kategoriju dela, kao i na bilo koje podređene kategorije"
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr "Ograniči izveštaj o popisu na određenu lokaciju zaliha, kao i na bilo koje podređene lokacije"
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr "Ne uključuj eksterne zalihe"
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr "Ne uključuj stavke sa zaliha u eksternim lokacijama"
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr "Generiši izveštaj"
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr "Generiši izveštaj koji sadrži sračunate podatke sa popisa"
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr "Ažuriraj delove"
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr "Ažuriraj izabrane delove sračunatim podacima popisa"
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr "Funkcionalnost popisa nije omogućena"
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Provera pozadinskog radnika nije uspjela"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr "Minimalna cena"
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr "Izmeni izračunatu vrednost za minimalnu cenu"
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr "Minimalna valuta cene"
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr "Maksimalna cena"
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr "Izmeni izračunatu vrednost maksimalne cene"
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr "Maksimalna valuta cene"
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr "Ažuriraj"
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr "Ažuriraj cene za ovaj deo"
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr "Nija moguća konverzija iz dostavljen valute u {default_currency}"
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr "Minimalna cena ne sme biti veća od maksimalne cene"
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr "Maksimalna cena ne sme biti manja od minimalne cene"
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr "Izaberi nadređeni sklop"
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr "Izaberi komponentu dela"
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr "Može se izgraditi"
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr "Izaberi deo sa kog će se kopirati spisak materijala"
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr "Ukloni postojeće podatke"
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr "Ukloni postojeće stavke sa spiska materijala pre kopiranja"
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr "Uključi nasleđeno"
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr "Uključi stavke sa spiska materijala koje su nasleđene od šablonskih delova"
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr "Preskoči nevažeće vrste"
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr "Omogući ovu opciju za preskakanje nevažećih vrsta"
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr "Kopiraj zamenske delove"
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr "Kopiraj zamenske delove prilikom duplikacije stavki sa spiska materijala"
 
@@ -6336,28 +6367,28 @@ msgstr "Stavka alocirana nalogu za prodaju"
 msgid "Not enough information"
 msgstr "Nema dovoljno informacija"
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr "Pronađena stavka"
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr "Deo dobavljača se ne poklapa sa stavkom porudžbine"
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr "Stavka porudžbine je već završena"
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr "Dalje informacije neophodne za primanje ove stavke"
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr "Primljene stavke sa naloga za kupovinu"
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr "Greška pri prijemu stavke porudžbine"
 
@@ -6437,15 +6468,15 @@ msgstr "Količina za alociranje"
 msgid "Label printing failed"
 msgstr "Greška pri štampanju natpisa"
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr "Greška pri renderovanju natpisa u PDF"
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr "Greška pri renderovanju natpisa u HTML"
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr "Nijedna stavka nije poslata na štampu"
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr "Pruža ugrađenu podršku za bar kodove"
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr "Kratki prefiks bar koda"
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr "Prilagođava prefiks koji se koristi za kratke bar kodove, može biti korisno u okruženjima sa više instanci aplikacije"
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr "Notifikacije"
@@ -6574,21 +6713,21 @@ msgstr "Razmena valuta"
 msgid "Default currency exchange integration"
 msgstr "Podrazumevana integracija razmene valuta"
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr "PDF štampanje natpisa"
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr "Pruža podršku za štampanje PDF natpisa"
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr "Debug mod"
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr "Omogućava debug mod - vraća sirov HTML umesto PDF-a"
 
@@ -6608,47 +6747,47 @@ msgstr "poslednji put korišćeno"
 msgid "Options"
 msgstr "Opcije"
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr "Veličina strane za stranu sa natpisima"
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr "Preskoči natpise"
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr "Preskoči ovaj broj natpisa pri štampanju strane sa natpisima"
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr "Border"
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr "Štampa border oko svakog natpisa"
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr "Lendskejp"
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr "Štampa stranu sa natpisima u landscape modu"
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr "Štampač natpisa"
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr "Stavlja više natpisa na jednu stranu"
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr "Natpis je prevelik za veličinu stranice"
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr "Nijedan natpis nije generisan"
 
@@ -6793,7 +6932,7 @@ msgstr "Ugrađen plugin"
 msgid "Package Plugin"
 msgstr "Paket plugin"
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr "Plugin"
 
@@ -6801,21 +6940,21 @@ msgstr "Plugin"
 msgid "Method"
 msgstr "Metod"
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr "Nije pronađen autor"
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr "Plugin '{p}' nije kompatibilan sa trenutnom verzijom aplikacije {v}"
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr "Plugin zahteva najmanje verziju {v}"
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr "Plugin zahteva najviše verziju {v}"
@@ -7012,28 +7151,27 @@ msgstr "Obriši konfiguraciju"
 msgid "Delete the plugin configuration from the database"
 msgstr "Obriši konfiguraciju plugina iz baze podataka"
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr "Stavke"
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr "Plugin nije pronađen"
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr "Plugin nije aktivan"
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr "Plugin ne podržava štampanje natpisa"
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr "Nevažeće dimenzije natpisa"
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr "Nema važećih stavki dostavljenih šablonu"
 
@@ -7053,172 +7191,136 @@ msgstr "Legal"
 msgid "Letter"
 msgstr "Letter"
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr "Šablonski fajl sa ovim imenom već postoji"
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr "Ime šablona"
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr "Opis šablona"
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr "Broj revizija (auto-inkrement)"
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr "Priloži kao model uz štampanje"
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr "Sačuvaj izveštaj kao prilog uz uvezanu instancu modela prilikom štampanja"
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr "Šablon imena fajlova"
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr "Šablon za generisanje imena fajlova"
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr "Šablon je omogućen"
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr "Tip ciljanog modela za šablon"
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "Filteri"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr "Filteri upita nad šablonima (lista razdvojena zarezom ključ=vrednost parova)"
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr "Šablonski fajl"
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr "Veličina strane za PDF izveštaje"
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr "Renderuj izveštaj u landscape orijentaciji"
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "Širina (u milimetrima)"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr "Širina natpisa, u milimetrima"
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "Visina (u milimetrima)"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr "Visina natpisa, u milimetrima"
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr "Broj stavki koje će biti obrađene"
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr "Generisanje izveštaja završeno"
-
-#: report/models.py:692
-msgid "Progress"
-msgstr "Napredak"
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr "Napredak generisanja izveštaja"
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr "Šablon izveštaja"
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr "Izlazni fajl"
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr "Generisan izlazni fajl"
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr "Plugin za izlaz natpisa"
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr "Šablon natpisa"
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr "Isečak"
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr "Izveštaj isečka fajla"
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr "Opis isečka fajla"
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr "Sredstvo"
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr "Izveštaj fajla sredstva"
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr "Opis fajla sredstva"
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr "Izaberi šablon izveštaja"
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr "Spisak primarnih ključeva stavke koje će biti uključene u ovaj izveštaj"
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr "Izaberi šablon natpisa"
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr "Plugin za štampanje"
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr "Izaberi plugin za korišćenje prilikom štampanja natpisa"
 
@@ -7370,103 +7472,103 @@ msgstr "Nadređena lokacija"
 msgid "Filter by parent location"
 msgstr "Filtriraj po nadređenoj lokaciji"
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr "Ime dela"
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr "Ime dela sadrži"
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr "Ime dela (regex)"
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr "Interni deo broja"
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr "Interni deo broja sadrži (osetljivo na velika i mala slova)"
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr "Interni broj dela (regex)"
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr "Minimalne zalihe"
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr "Maksimalne zalihe"
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr "Statusni kod"
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr "Eksterna lokacija"
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr "Potrošeno od strane naloga za izradu"
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr "Instalirano u drugu stavku sa zaliha"
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr "Stablo dela"
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr "Ažurirano pre"
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr "Ažurirano nakon"
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr "Popis pre"
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr "Popis nakon"
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr "Datum isteka pre"
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr "Datum isteka nakon"
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr "Zastarelo"
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr "Količina je neophodna"
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr "Validan deo mora biti dosavljen"
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr "Dati dobavljač ne postoji"
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr "Deo dobavljača ima definisanu veličinu pakovanja, ali fleg use_pack_size nije postavljen"
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr "Serijski brojevi ne mogu biti dostavljeni za deo koji nije moguće pratiti"
 
@@ -7502,7 +7604,7 @@ msgstr "Izaberi vlasnika"
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr "Stavke sa zaliha ne mogu biti direktno locirane u strukturnim lokacijama zaliha, ali mogu biti locirane u podređenim lokacijama."
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr "Eksterna"
 
@@ -8356,199 +8458,199 @@ msgstr "Nalozi za prodaju"
 msgid "Return Orders"
 msgstr "Nalozi za vraćanje"
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr "Skup dozvola"
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "Grupa"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "Pregledaj"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "Dozvola za pregled stavki"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr "Dodaj"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "Dozvola za dodavanje stavki"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "Promeni"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "Dozvole za izmenu stavki"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "Obriši"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "Dozvola za brisanje stavki"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Korisničko ime"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Ime"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "Ime korisnika"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Prezime"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "Prezime korisnika"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "Adresa E-pošte korisnika"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "Osoblje"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr "Da li ovaj korisnik ima dozvole koje ima osoblje?"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr "Super korisnik"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr "Da li je ovaj korisnik Super korisnik?"
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "Da li je nalog ovog korisnika aktivan?"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "Nemate dozvolu za promenu ove korisničke uloge."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Samo superkorisnici mogu kreirati nove korisnike"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "Vaš nalog je kreiran"
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "Molimo vas koristite opciju resetovanja lozinke da biste se prijavili"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "Dobrodošli u InvenTree"
 
diff --git a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po
index 1289b4a301..933c299d0f 100644
--- a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po
+++ b/src/backend/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: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Swedish\n"
 "Language: sv_SE\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "API-slutpunkt hittades inte"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Användaren har inte behörighet att se denna modell"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "Kunde inte konvertera {original} till {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Ogiltigt antal angivet"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "Värdet '{name}' visas inte i mönsterformat"
 msgid "Provided value does not match required pattern: "
 msgstr "Det angivna värdet matchar inte det obligatoriska mönstret: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Tom serienummersträng"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Serienummret finns redan"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr "Ogiltig grupp: {group}"
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "Gruppintervall {group} överstiger tillåtet antal ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Inga serienummer hittades"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Antal unika serienummer ({len(serials)}) måste matcha antal ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Ta bort HTML-taggar från detta värde"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr "Kinesiska (Traditionell)"
 msgid "Log in to the app"
 msgstr "Logga in på appen"
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "E-postadress"
 
@@ -391,19 +403,19 @@ msgstr ""
 msgid "Invalid choice"
 msgstr "Ogiltigt val"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Namn"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Beskrivning"
 msgid "Description (optional)"
 msgstr "Beskrivning (valfritt)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Sökväg"
 
@@ -510,28 +522,28 @@ msgstr "Överskott får inte överstiga 100%"
 msgid "Invalid value for overage"
 msgstr "Ogiltigt värde för överskott"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "Orderstatus"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Föregående tillverkning"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr "Del"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "Kategori"
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "Tillverkningen måste avbrytas innan den kan tas bort"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Valfri"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Spårad"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr "Testbar"
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Allokerad"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Tillgänglig"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Byggorder"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Byggordrar"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Ogiltigt val för överordnad bygge"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Tillverknings order referens"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Tillverknings order referens"
 msgid "Reference"
 msgstr "Referens"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "Tillverknings order till vilken detta produkt är tilldelad"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Välj del att tillverka"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Försäljningsorderreferens"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Försäljningsorder till vilken detta bygge allokeras"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Källa Plats"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Välj plats att ta lager från för detta bygge (lämna tomt för att ta från någon lagerplats)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Destinationsplats"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Välj plats där de färdiga objekten kommer att lagras"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Tillverkat antal"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Antal lagerobjekt att bygga"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Slutförda objekt"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Antal lagerposter som har slutförts"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Tillverknings status"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Tillverkning statuskod"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Batchkod"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Batch-kod för denna byggutdata"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Skapad"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Datum för slutförande"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Måldatum för färdigställande. Tillverkningen kommer att förfallas efter detta datum."
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Slutförandedatum"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "slutfört av"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Utfärdad av"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "Användare som utfärdade denna tillverknings order"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Ansvarig"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr ""
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Extern länk"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Länk till extern URL"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "Projektkod"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "Tillverknings order {build} har slutförts"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "En tillverknings order har slutförts"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "Ingen byggutgång angiven"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "Byggutgång är redan slutförd"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "Byggutgång matchar inte bygg order"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr "Antal"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 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:1647
+#: build/models.py:1608
 #, 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:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "Lagerposten är överallokerad"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "Allokeringsmängden måste vara större än noll"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "Antal måste vara 1 för serialiserat lager"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr "Artikel i lager"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Källa lagervara"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Lagersaldo att allokera för att bygga"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Installera till"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Destination lagervara"
 
@@ -1034,10 +1057,10 @@ msgstr "Ange serienummer för att tillverkade produkter"
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Plats"
 
@@ -1053,7 +1076,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr ""
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr "Plats för färdiga produkter"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Status"
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr "Avbruten"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Slutför"
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "Unik projektkod"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "Projektbeskrivning"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Användare"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Aktiv"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Länk"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "Bild"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Bilaga"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Saknad fil"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Extern länk saknas"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Välj fil att bifoga"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Kommentar"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr "Filstorlek"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr "Etikett"
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr "Färg"
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "Skapad"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr "Senast uppdaterad"
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr "Streckkodsdata"
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr "Filnamn"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "Mall"
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr ""
 
@@ -2415,7 +2438,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Sidstorlek"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "Tillverkare"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Företag"
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "Kontakt"
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "Adress"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "Leverantör"
 
@@ -3713,7 +3736,7 @@ msgstr "Leverantör"
 msgid "Select supplier"
 msgstr "Välj leverantör"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr "Företagsnamn"
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr "I lager"
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr "Placerad"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr "Ogiltigt exportformat"
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Datafil"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr "Har projektkod"
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "Slutförd"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr "Försäljningsorder"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "Måldatum"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "Mål"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "Kund"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Skickad"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr "Leveransdatum"
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr "Fakturanummer"
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "Artiklar"
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr "Välj kategori"
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr "Kopiera bild"
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr "Kategorinamn"
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "Leverantörer"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr "Generera rapport"
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Kontroll av bakgrundsarbetare misslyckades"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr "Uppdatera"
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr "Statuskod"
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr "Lägg till"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr ""
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "Radera"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Användarnamn"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Förnamn"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "Förnamn på användaren"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Efternamn"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "Efternamn på användaren"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "Avsändarens E-postadress"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "Personal"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr "Har den här användaren behörighet för personal"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr "Superanvändare"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr "Är den här användaren en superanvändare"
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "Är detta användarkonto aktivt"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "Du har inte behörighet att ändra denna användarrollen."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Endast superanvändare kan skapa nya användare"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "Ditt konto har skapats."
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "Använd funktionen för lösenordsåterställning för att logga in"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "Välkommen till InvenTree"
 
diff --git a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po
index 6f71b6e0a6..96fa2b2086 100644
--- a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po
+++ b/src/backend/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: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Thai\n"
 "Language: th_TH\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "ไม่พบ API endpoint"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr ""
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr ""
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "ปริมาณสินค้าไม่ถูกต้อง"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr ""
 msgid "Provided value does not match required pattern: "
 msgstr ""
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr ""
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "หมายเลขซีเรียลซ้ำกัน"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "ไม่พบหมายเลขซีเรียล"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr ""
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr ""
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "อีเมล"
 
@@ -391,19 +403,19 @@ msgstr ""
 msgid "Invalid choice"
 msgstr ""
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "ชื่อ"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "คำอธิบาย"
 msgid "Description (optional)"
 msgstr ""
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr ""
 
@@ -510,28 +522,28 @@ msgstr ""
 msgid "Invalid value for overage"
 msgstr ""
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr ""
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr ""
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr ""
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr ""
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr ""
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr ""
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr ""
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr ""
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr ""
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr ""
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr ""
 msgid "Reference"
 msgstr ""
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr ""
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr ""
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr ""
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr ""
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr ""
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr ""
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr ""
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr ""
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr ""
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr ""
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr ""
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr ""
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr ""
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr ""
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr ""
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr ""
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr ""
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "ออกโดย"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr ""
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr ""
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr ""
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr ""
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr ""
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr ""
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr ""
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr ""
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr ""
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr ""
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "จำนวนต้องมีค่ามากกว่า 0"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr ""
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr ""
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr ""
 
@@ -1034,10 +1057,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "สถานที่"
 
@@ -1053,7 +1076,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr ""
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "สถานะ"
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr "ยกเลิกแล้ว"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "สำเร็จแล้ว"
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "ผู้ใช้งาน"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr ""
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "ลิงก์"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr ""
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "ไฟล์แนบ"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "ไม่พบไฟล์"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr ""
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "เลือกไฟล์ที่ต้องการแนบ"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "ความคิดเห็น"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr ""
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr "ชื่อไฟล์"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr ""
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr ""
 
@@ -2415,7 +2438,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr ""
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr ""
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr ""
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr ""
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr ""
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr ""
 
@@ -3713,7 +3736,7 @@ msgstr ""
 msgid "Select supplier"
 msgstr ""
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr ""
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "ไฟล์ข้อมูล"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "สำเร็จแล้ว"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr ""
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "จัดส่งแล้ว"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "ชิ้นส่วน"
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr ""
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr ""
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr ""
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr ""
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr ""
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr ""
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr ""
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "ยินดีต้อนรับเข้าสู่ Inventree"
 
diff --git a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po
index 0499f828cb..8ac7b90b32 100644
--- a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po
+++ b/src/backend/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: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Turkish\n"
 "Language: tr_TR\n"
@@ -25,19 +25,31 @@ msgstr "Başka bir şey yapmadan önce iki faktörlü kimlik doğrulamayı etkin
 msgid "API endpoint not found"
 msgstr "API uç noktası bulunamadı"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr "Geçersiz ögeler listesi sağlandı"
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr "Geçersiz filtreler sağlandı"
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
-msgstr "Silinecek öge bulunamadı"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
+msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Kullanıcının bu modeli görüntüleme izni yok"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "{original} birimi {unit} birimine dönüştürülemedi"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Geçersiz veri sağlandı"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr "Geçersiz ondalık değer"
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "'{name}' değeri desen formatında yer almıyor"
 msgid "Provided value does not match required pattern: "
 msgstr "Sağlanan değer gerekli kalıpla eşleşmiyor: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr "Geçersiz grup: {grup}"
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Boş seri numarası dizesi"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Yinelenen seri"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr "Geçersiz grup: {group}"
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "Grup aralığı {group}, izin verilen miktarı aşmaktadır ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Seri numarası bulunamadı"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Benzersiz seri numaralarının sayısı ({len(serials)}) ile miktarın ({expected_quantity}) eşleşmesi gerekmektedir"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Bu değerden HTML etiketlerini kaldır"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr "Veriler yasaklanmış işaretleme içeriği içeriyor"
 
@@ -339,7 +351,7 @@ msgstr "Çince (Geleneksel)"
 msgid "Log in to the app"
 msgstr "Uygulamaya giriş yapın"
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "E-posta"
 
@@ -391,19 +403,19 @@ msgstr "Aynı kaynak altında birden fazla aynı isim kullanılamaz"
 msgid "Invalid choice"
 msgstr "Geçersiz seçim"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Adı"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Açıklama"
 msgid "Description (optional)"
 msgstr "Açıklama (isteğe bağlı)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Yol"
 
@@ -510,28 +522,28 @@ msgstr "Fazlalık %100'ü geçmemelidir"
 msgid "Invalid value for overage"
 msgstr "Aşım için geçersiz değer"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "Sipariş Durumu"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Üst Yapım İşi"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr "Varyantları Dahil Et"
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr "Varyantları Dahil Et"
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr "Varyantları Dahil Et"
 msgid "Part"
 msgstr "Parça"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "Kategori"
 
@@ -612,90 +623,102 @@ msgstr "Daha önce tamamlandı"
 msgid "Completed after"
 msgstr "Sonra tamamlandı"
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "Yapımın silinebilmesi için önce iptal edilmesi gerekir"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "Sarf Malzemesi"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "İsteğe Bağlı"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "Montaj"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "İzlenen"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr "Test Edilebilir"
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr "Ödenmemiş Sipariş"
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Ayrıldı"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Mevcut"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Yapım İşi Emri"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Yapım İşi Emirleri"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr "Montaj malzeme listesi doğrulanmadı"
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr "İnaktif bir parça için yapım siparişi oluşturulamaz"
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr "Kilidi açılmış bir parça için yapım siparişi oluşturulamaz"
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Üst yapım için geçersiz seçim"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "Sorumlu kullanıcı veya grup belirtilmelidir"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "Yapım siparişi parçası değiştirilemez"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr "Hedef tarih başlangıç tarihinden sonra olmalıdır"
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Yapım İşi Emri Referansı"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Yapım İşi Emri Referansı"
 msgid "Reference"
 msgstr "Referans"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "Yapımın kısa açıklaması (isteğe bağlı)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "Bu yapım işinin tahsis edildiği yapım işi emri"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Yapım işi için parça seçin"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Satış Emri Referansı"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Bu yapım işinin tahsis edildiği satış emri"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Kaynak Konum"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Bu yapım işi için stok alınacak konumu seçin (her hangi bir stok konumundan alınması için boş bırakın)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Hedef Konum"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Tamamlanmış ögelerin saklanacağı konumu seçiniz"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Yapım İşi Miktarı"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Yapım işi stok kalemlerinin sayısı"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Tamamlanmış ögeler"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Tamamlanan stok kalemlerinin sayısı"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Yapım İşi Durumu"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Yapım işi durum kodu"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Sıra numarası"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Yapım işi çıktısı için sıra numarası"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Oluşturulma tarihi"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr "İhtiyaca bağlı sipariş başlangıç tarihi"
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr "Bu ihtiyaca bağlı siparişi için planlanan başlangıç tarihi"
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Hedef tamamlama tarihi"
 
-#: build/models.py:365
+#: build/models.py:326
 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:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Tamamlama tarihi"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "tamamlayan"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Veren"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "Bu yapım işi emrini veren kullanıcı"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Sorumlu"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "Bu yapım siparişinden sorumlu kullanıcı veya grup"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Harici Bağlantı"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Harici URL'ye bağlantı"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "Yapım Önceliği"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "Bu yapım siparişinin önceliği"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "Proje Kodu"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "Bu yapım siparişi için proje kodu"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr "Yapıma ayrılanları tamamlamak için boşaltma görevi başarısız oldu"
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "{build} yapım siparişi tamamlandı"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "Bir yapım siparişi tamamlandı"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr "İzlenebilir parçalar için seri numaraları sağlanmalıdır"
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "Yapım işi çıktısı belirtilmedi"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "Yapım işi çıktısı zaten tamamlanmış"
 
-#: build/models.py:1003
+#: build/models.py:964
 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:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "Miktar sıfırdan büyük olmalıdır"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "Miktar çıktı miktarından büyük olamaz"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "{serial} yapım çıktısı gerekli testleri geçemedi"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr "Yapım Siparişi Satır Ögesi"
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "Nesne yap"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "Nesne yap"
 msgid "Quantity"
 msgstr "Miktar"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "Yapım siparişi için gereken miktar"
 
-#: build/models.py:1636
+#: build/models.py:1597
 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:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "Ayrılan miktar ({q}) mevcut stok miktarını ({a}) aşmamalı"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "Stok kalemi fazladan tahsis edilmiş"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "Seri numaralı stok için miktar bir olmalı"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "Seçilen stok ögesi malzeme listesi satırıyla eşleşmiyor"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "Seçilen stok ögesi malzeme listesi satırıyla eşleşmiyor"
 msgid "Stock Item"
 msgstr "Stok Kalemi"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Kaynak stok kalemi"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Yapım işi için tahsis edilen stok miktarı"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Kurulduğu yer"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Hedef stok kalemi"
 
@@ -1034,10 +1057,10 @@ msgstr "Yapım işi çıktısı için seri numaraları girin"
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Konum"
 
@@ -1053,7 +1076,7 @@ msgstr "Seri Numaralarını Otomatik Ayır"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "Gerekli ögeleri eşleşen seri numaralarıyla otomatik ayır"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "Şu seri numaraları zaten varlar veya geçersizler"
@@ -1082,10 +1105,10 @@ msgstr "Yapım çıktı(larını) hurdaya ayırma nedeni"
 msgid "Location for completed build outputs"
 msgstr "Tamamlanan yapım çıktıları içi konum"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Durum"
 
@@ -1270,8 +1293,8 @@ msgstr "ML Parça Adı"
 msgid "Build"
 msgstr "Yap"
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr "Tedarikçi Parçası"
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr "Çeşide İzin Ver"
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "ML Ögesi"
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr "Ayrılan Stok"
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr "Siparişte"
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr "Üretimde"
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr "Harici Stok"
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "Mevcut Stok"
 
@@ -1356,7 +1379,7 @@ msgstr "İptal edildi"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Tamamlandı"
 
@@ -1405,536 +1428,536 @@ msgstr "Geçerli bir para birimi kodu sağlanmamış"
 msgid "No plugin"
 msgstr "Eklenti yok"
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "Güncellendi"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "Son güncellemenin zaman damgası"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "Eşsiz proje kodu"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "Proje açıklaması"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr "Bu projeden sorumlu kullanıcı veya grup"
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr "Ayarlar anahtarı"
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "Ayarlar değeri"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr "Seçilen değer geçerli bir seçenek değil"
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr "Değer bir boolean değer olmalıdır"
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr "Değer bir integer değer olmalıdır"
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr "Değer geçerli bir sayı olmalıdır"
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr "Değer doğrulama kontrollerini geçemiyor"
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr "Anahtar dizesi benzersiz olmalı"
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Kullanıcı"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr "Fiyat düşürme miktarı"
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "Fiyat"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr "Belirtilen miktardaki birim fiyat"
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr "Bitiş Noktası"
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr "Bu web kancasının alındığı uç nokta"
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr "Bu web kancası için ad"
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Aktif"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr "Bu web kancası etkin mi"
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr "Token"
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr "Erişim için belirteç"
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "Gizli"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr "HMAC için paylaşılan gizli bilgi"
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr "Mesaj Kimliği"
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr "Bu mesaj için benzersiz tanımlayıcı"
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr "Sağlayıcı"
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr "Bu mesajın alındığı ana bilgisayar"
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr "Başlık"
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr "Bu mesajın başlığı"
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr "Gövde"
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr "Bu mesajın gövdesi"
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr "Bu mesajın alındığı uç nokta"
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "Başlık"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Bağlantı"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "Yayınlandı"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "Yazar"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "Özet"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr "Oku"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr "Haberi okudunuz mu?"
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "Resim"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "Görsel yükleyin"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr "Sembol"
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr "Tanımlama"
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr "Birim tanımlaması"
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Ek"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Eksik dosya"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Bozuk dış bağlantı"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Eklenecek dosyayı seç"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Yorum"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr "Özel Durum"
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr "Özel Durumlar"
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "Değer"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr "Renk"
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr "Model"
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr "Model seçilmelidir"
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr "Anahtar Seçilmelidir"
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr "Mantıksal anahtar seçilmelidir"
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "Oluşturuldu"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr "{verbose_name} iptal edildi"
 msgid "A order that is assigned to you was canceled"
 msgstr "Size atanmış bir emir iptal edildi"
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr "Alınan Ürünler"
 
@@ -2036,7 +2059,7 @@ msgstr "Anahtar görev argümanları"
 msgid "Filename"
 msgstr "Dosya adı"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr "Model Tipi"
 
@@ -2384,8 +2407,8 @@ 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/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "Şablon"
@@ -2398,8 +2421,8 @@ msgstr "Parçaları varsayılan olan şablondur"
 msgid "Parts can be assembled from other components by default"
 msgstr "Parçalar varsayılan olarak başka bileşenlerden monte edilebilir"
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "Bileşen"
 
@@ -2415,7 +2438,7 @@ msgstr "Satın Alınabilir"
 msgid "Parts are purchaseable by default"
 msgstr "Parçalar varsayılan olarak satın alınabilir"
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr "Satılabilir"
 
@@ -2619,8 +2642,8 @@ msgstr "Rapor Hatalarını Günlüğe Kaydet"
 msgid "Log errors which occur when generating reports"
 msgstr "Raporlar üretirken oluşan hataları günlüğe kaydet"
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Sayfa Boyutu"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "Üretici"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Şirket"
 
@@ -3497,8 +3520,8 @@ msgstr "İletişim telefon numarası"
 msgid "Contact email address"
 msgstr "İletişim e-posta adresi"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "İletişim"
 
@@ -3542,7 +3565,7 @@ msgstr "Bu şirket üretim yapıyor mu?"
 msgid "Default currency used for this company"
 msgstr "Bu şirket için varsayılan para birimi"
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "Adres"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr "Üretici seçin"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr "ÜPN"
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "Tedarikçi"
 
@@ -3713,7 +3736,7 @@ msgstr "Tedarikçi"
 msgid "Select supplier"
 msgstr "Tedarikçi seçin"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr "Sipariş verildi"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Veri Dosyası"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr "Etiket Yazdırma"
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr "Oluşturan"
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "Tamamlandı"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr "Sipariş Emri"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr "Harici sayfaya bağlantı"
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "Hedeflenen tarih"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr "Sipariş referansı"
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr "Sipariş referansı"
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "Hedef"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "Müşteri"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Sevk edildi"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr "Tahsis miktarı stok miktarını aşamaz"
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr "Seri numaralı stok kalemi için miktar bir olmalı"
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr "Stok tahsis miktarını girin"
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "Parçalar"
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr "DPN"
@@ -5244,7 +5283,7 @@ msgstr "DPN"
 msgid "Part revision or version number"
 msgstr "Parça revizyon veya versiyon numarası"
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr "Revizyon"
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr "Minimum Stok"
 
@@ -5613,7 +5652,7 @@ msgstr "Test Açıklaması"
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "Etkin"
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr "Stok Kalemleri"
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Arka plan çalışanı kontrolü başarısız oldu"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr "Şablon adı"
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr "Dosya Adı Deseni"
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "Filtreler"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "Genişlik [mm]"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr "Etiket genişliği mm olarak belirtilmeli"
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "Yükseklik [mm]"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr "Etiket yüksekliği mm olarak belirtilmeli"
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr "Satış Emirleri"
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr "İzinleri ayarla"
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "Grup"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "Görünüm"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "Parçayı görüntüleme izni"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "Parça ekleme izni"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "Değiştir"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "Parçaları düzenleme izni"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "Parçaları silme izni"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Kullanıcı Adı"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Adı"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "Kullanıcının adı"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Soyadı"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "Kullanıcının soyadı"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "Kullanıcının e-posta adresi"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "Personel"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr "Bu kullanıcının personel izinleri var mı"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr "Süper Kullanıcı"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr "Bu kullanıcı bir süper kullanıcı mı"
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "Bu kullanıcı hesabı etkin mi"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "Bu kullanıcı rolünü değiştirmek için izniniz yok."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Sadece süper kullanıcılar yeni kullanıcı oluşturabilir"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "Kullanıcı hesabınız oluşturulmuştur."
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "Giriş yapmak için lütfen şifre sıfırlama fonksiyonunu kullanınız"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "InvenTree'ye Hoşgeldiniz"
 
diff --git a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po
index 32402c2ca7..b8122ef608 100644
--- a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Ukrainian\n"
 "Language: uk_UA\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "Кінцева точка API не знайдена"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "У користувача немає дозволу на перегляд цієї моделі"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "Не вдалося перетворити {original} на {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Невірна кількість"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr ""
 msgid "Provided value does not match required pattern: "
 msgstr ""
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Пустий серійний номер"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr ""
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr ""
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr ""
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr "Китайська (Традиційна)"
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr ""
 
@@ -391,19 +403,19 @@ msgstr ""
 msgid "Invalid choice"
 msgstr ""
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr ""
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr ""
 msgid "Description (optional)"
 msgstr ""
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Шлях"
 
@@ -510,28 +522,28 @@ msgstr ""
 msgid "Invalid value for overage"
 msgstr ""
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr ""
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr ""
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr "Деталь"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr ""
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr ""
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr ""
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr ""
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr ""
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr ""
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr ""
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr ""
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr ""
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr ""
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr ""
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr ""
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr ""
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr ""
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr ""
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr ""
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr ""
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr ""
 msgid "Reference"
 msgstr ""
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr ""
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Обрати деталь для створення"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr ""
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr ""
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr ""
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr ""
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr ""
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr ""
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr ""
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr ""
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr ""
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr ""
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr ""
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr ""
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr ""
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr ""
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr ""
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr ""
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr ""
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr ""
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr ""
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr ""
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr ""
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr ""
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr ""
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr ""
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr ""
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr ""
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr ""
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr ""
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr ""
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr ""
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr ""
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr ""
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr ""
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr ""
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr ""
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr ""
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr ""
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr ""
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr ""
 msgid "Quantity"
 msgstr ""
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr ""
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr ""
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr ""
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr ""
 
@@ -1034,10 +1057,10 @@ msgstr ""
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr ""
 
@@ -1053,7 +1076,7 @@ msgstr ""
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr ""
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr ""
@@ -1082,10 +1105,10 @@ msgstr ""
 msgid "Location for completed build outputs"
 msgstr ""
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr ""
 
@@ -1270,8 +1293,8 @@ msgstr ""
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr ""
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr ""
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr ""
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr ""
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr ""
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr ""
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr ""
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr ""
 
@@ -1356,7 +1379,7 @@ msgstr ""
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr ""
 
@@ -1405,536 +1428,536 @@ msgstr ""
 msgid "No plugin"
 msgstr ""
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr ""
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr ""
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr ""
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr ""
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr ""
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr ""
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr ""
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr ""
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr ""
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr ""
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr ""
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr ""
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr ""
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr ""
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr ""
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr ""
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr ""
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr ""
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr ""
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr ""
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr ""
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr ""
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr ""
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr ""
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr ""
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr ""
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr ""
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr ""
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr ""
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr ""
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr ""
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr ""
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr ""
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr ""
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr ""
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr ""
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr ""
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr ""
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr ""
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr ""
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr ""
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr ""
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr ""
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr ""
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr ""
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr ""
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr ""
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr ""
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr ""
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr ""
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr ""
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr ""
 msgid "A order that is assigned to you was canceled"
 msgstr ""
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr ""
 
@@ -2036,7 +2059,7 @@ msgstr ""
 msgid "Filename"
 msgstr ""
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr ""
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr ""
@@ -2398,8 +2421,8 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr ""
 
@@ -2415,7 +2438,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr ""
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr ""
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr ""
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr ""
 
@@ -3497,8 +3520,8 @@ msgstr ""
 msgid "Contact email address"
 msgstr ""
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr ""
 
@@ -3542,7 +3565,7 @@ msgstr ""
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr ""
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr ""
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr ""
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr ""
 
@@ -3713,7 +3736,7 @@ msgstr ""
 msgid "Select supplier"
 msgstr ""
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr ""
 
@@ -3733,7 +3756,7 @@ msgstr ""
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr ""
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr ""
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr ""
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr ""
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr ""
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr ""
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr ""
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr ""
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr ""
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr ""
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr ""
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr ""
 msgid "Sales Order"
 msgstr ""
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr ""
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr ""
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr ""
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr ""
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr ""
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr ""
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr ""
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr ""
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr ""
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr ""
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr ""
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr ""
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr ""
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr ""
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr ""
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr ""
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr ""
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr ""
-
-#: order/models.py:584
-msgid "received by"
-msgstr ""
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr ""
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr ""
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr ""
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr ""
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr ""
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr ""
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr ""
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr ""
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr ""
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr ""
+
+#: order/models.py:546
+msgid "received by"
+msgstr ""
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr ""
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr ""
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr ""
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr ""
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr ""
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr ""
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr ""
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr ""
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr ""
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr ""
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr ""
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr ""
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr ""
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr ""
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr ""
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr ""
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr ""
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr ""
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr ""
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr ""
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr ""
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr ""
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr ""
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr ""
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr ""
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr ""
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr ""
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr ""
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr ""
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr ""
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr ""
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr ""
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr ""
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr ""
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr ""
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr ""
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr ""
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr ""
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr ""
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr ""
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr ""
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr ""
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr ""
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr ""
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr ""
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr ""
 msgid "Line item does not match purchase order"
 msgstr ""
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr ""
 
@@ -4811,7 +4854,7 @@ msgstr ""
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr ""
 msgid "An integer quantity must be provided for trackable parts"
 msgstr ""
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr ""
 
@@ -4891,32 +4934,32 @@ msgstr ""
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr ""
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr ""
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr ""
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr ""
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr ""
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr ""
 
@@ -4970,107 +5013,103 @@ msgstr ""
 msgid "Sales order {so} is now overdue"
 msgstr ""
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr ""
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr ""
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr ""
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr ""
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr ""
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr ""
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr ""
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr ""
 
@@ -5235,7 +5274,7 @@ msgstr ""
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr ""
 
@@ -5276,7 +5315,7 @@ msgstr ""
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr ""
 
@@ -5613,7 +5652,7 @@ msgstr ""
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr ""
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr ""
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr ""
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr ""
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr ""
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr ""
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr ""
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr ""
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr ""
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr ""
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr ""
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr ""
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr ""
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr ""
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr ""
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr ""
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr ""
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr ""
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr ""
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr ""
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr ""
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr ""
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr ""
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr ""
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr ""
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr ""
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr ""
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr ""
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr ""
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr ""
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr ""
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr ""
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr ""
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr ""
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr ""
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr ""
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr ""
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr ""
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr ""
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr ""
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr ""
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr ""
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr ""
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr ""
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr ""
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr ""
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr ""
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr ""
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr ""
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr ""
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr ""
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr ""
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr ""
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr ""
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr ""
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr ""
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr ""
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr ""
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr ""
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr ""
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr ""
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr ""
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr ""
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr ""
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr ""
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr ""
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr ""
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr ""
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr ""
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr ""
 msgid "Label printing failed"
 msgstr ""
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr ""
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr ""
@@ -6574,21 +6713,21 @@ msgstr ""
 msgid "Default currency exchange integration"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr ""
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr ""
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr ""
 
@@ -6793,7 +6932,7 @@ msgstr ""
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr ""
 
@@ -6801,21 +6940,21 @@ msgstr ""
 msgid "Method"
 msgstr ""
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr ""
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr ""
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr ""
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr ""
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr ""
 msgid "Letter"
 msgstr ""
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr ""
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr ""
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr ""
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr ""
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr ""
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr ""
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr ""
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr ""
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr ""
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr ""
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr ""
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr ""
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr ""
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr ""
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr ""
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr ""
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr ""
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr ""
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr ""
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr ""
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr ""
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr ""
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr ""
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr ""
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr ""
 
@@ -7502,7 +7604,7 @@ msgstr ""
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr ""
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr ""
 
@@ -8356,199 +8458,199 @@ msgstr ""
 msgid "Return Orders"
 msgstr ""
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr ""
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr ""
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr ""
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr ""
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr ""
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr ""
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Ім`я"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr ""
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Прізвище"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr ""
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "Адреса електронної пошти користувача"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "Персонал"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr ""
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr ""
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr ""
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr ""
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr ""
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr ""
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr ""
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr ""
 
diff --git a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po
index 5b03aa0fe9..d49c64cbba 100644
--- a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po
+++ b/src/backend/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: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Vietnamese\n"
 "Language: vi_VN\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "API endpoint không tồn tại"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr ""
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr ""
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
 msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "Người dùng không được phân quyền xem mẫu này"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "Không thể chuyển đổi {original} sang {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "Số lượng cung cấp không hợp lệ"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "Giá trị '{name}' không xuất hiện ở định dạng mẫu"
 msgid "Provided value does not match required pattern: "
 msgstr "Giá trị được cung cấp không khớp với mẫu bắt buộc: "
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "Chuỗi số sê-ri trống"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "Trùng lặp sê-ri"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "Khoảng nhóm {group} vượt cho phép số lượng ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "Không tìm thấy số sê-ri"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "Số sê ri duy nhất ({len(serials)}) phải phù hợp số lượng ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "Xóa thẻ HTML từ giá trị này"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr "Tiếng Trung (Phồn thể)"
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "Email"
 
@@ -391,19 +403,19 @@ msgstr "Tên trùng lặp không thể tồn tại trong cùng cấp thư mục"
 msgid "Invalid choice"
 msgstr "Lựa chọn sai"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "Tên"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "Mô tả"
 msgid "Description (optional)"
 msgstr "Mô tả (tùy chọn)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "Đường dẫn"
 
@@ -510,28 +522,28 @@ msgstr "Hàng hóa dư thừa không thể vượt quá 100%"
 msgid "Invalid value for overage"
 msgstr "Giá trị không hợp lệ cho hàng hóa dư thừa"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "Trạng thái đặt hàng"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "Phiên bản cha"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr ""
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr ""
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr ""
 msgid "Part"
 msgstr "Nguyên liệu"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "Danh mục"
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr ""
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "Bạn dựng phải được hủy bỏ trước khi có thể xóa được"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "Vật tư tiêu hao"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "Tuỳ chọn"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "Lắp ráp"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "Đã theo dõi"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr "Có thể kiểm tra"
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "Đã cấp phát"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "Có sẵn"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "Tạo đơn hàng"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "Tạo đơn hàng"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr "Dây chuyền BOM chưa được xác thực"
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr "Không thể tạo đơn hàng cho hàng hoá đang không hoạt động"
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr "Không thể tạo đơn hàng cho hàng hoá đang mở khoá"
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "Lựa chọn sai cho bản dựng cha"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "Phải chọn người dùng hoặc nhóm"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "Sản phẩm đơn đặt bản dựng không thể thay đổi được"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "Tham chiếu đơn đặt bản dựng"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "Tham chiếu đơn đặt bản dựng"
 msgid "Reference"
 msgstr "Tham chiếu"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "Mô tả ngắn về phiên bạn (Tùy chọn)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "Đơn đặt bản dựng với bản dựng này đã được phân bổ"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "Chọn sản phẩm để xây dựng"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "Tham chiếu đơn đặt bản dựng"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "Đơn đặt bán hàng với bản dựng này đã được phân bổ"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "Địa điểm nguồn"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "Chọn địa điểm để lấy trong kho cho bản dựng này (để trống để lấy từ bất kỳ vị trí kho nào)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "Địa điểm đích"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "Chọn địa điểm nơi hàng hóa hoàn thiện sẽ được lưu kho"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "Xây dựng số lượng"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "Số kho hàng để dựng"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "Những mục hoàn thành"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "Số sản phẩm trong kho đã được hoàn thiện"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "Trnạg thái bản dựng"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "Mã trạng thái bản dựng"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "Mã lô hàng"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "Mã lô cho đầu ra bản dựng này"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "Ngày tạo"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "Ngày hoàn thành mục tiêu"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Ngày mục tiêu để hoàn thành bản dựng. Bản dựng sẽ bị quá hạn sau ngày này."
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "Ngày hoàn thành"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "hoàn thành bởi"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "Cấp bởi"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "Người dùng người đã được phân công cho đơn đặt bản dựng này"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "Chịu trách nhiệm"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "Người dùng hoặc nhóm có trách nhiệm với đơn đặt bản dựng này"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "Liên kết bên ngoài"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "Liên kết đến URL bên ngoài"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "Độ ưu tiên"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "Độ quan trọng của đơn đặt bản dựng"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "Mã dự án"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "Mã dự án cho đơn đặt bản dựng này"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr "Không thể dỡ bỏ tác vụ để hoàn tất phân bổ"
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "Đơn đặt bản dựng {build} đã được hoàn thành"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "Một đơn đặt bản dựng đã được hoàn thành"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr "Số sê-ri phải được cung cấp cho hàng hoá có thể theo dõi"
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "Không có đầu ra bản dựng đã được chỉ ra"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "Đầu ra bản dựng đã được hoàn thiện"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "Đầu ra bản dựng không phù hợp với đơn đặt bản dựng"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "Số lượng phải lớn hơn 0"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "Số lượng không thể lớn hơn số lượng đầu ra"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "Tạo đầu ra {serial} chưa vượt qua tất cả các bài kiểm tra"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr "Tạo mục đơn hàng"
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "Dựng đối tượng"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "Dựng đối tượng"
 msgid "Quantity"
 msgstr "Số lượng"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "Yêu cầu số lượng để dựng đơn đặt"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "Xây dựng mục phải xác định đầu ra, bởi vì sản phẩm chủ được đánh dấu là có thể theo dõi"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "Số lượng được phân bổ ({q}) không thể vượt quá số lượng có trong kho ({a})"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "Kho hàng đã bị phân bổ quá đà"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "Số lượng phân bổ phải lớn hơn 0"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "Số lượng phải là 1 cho kho sê ri"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "Hàng trong kho đã chọn không phù hợp với đường BOM"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "Hàng trong kho đã chọn không phù hợp với đường BOM"
 msgid "Stock Item"
 msgstr "Kho hàng"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "Kho hàng gốc"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "Số lượng kho hàng cần chỉ định để xây dựng"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "Cài đặt vào"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "Kho hàng đích"
 
@@ -1034,10 +1057,10 @@ msgstr "Nhập vào số sêri cho đầu ra bản dựng"
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "Địa điểm"
 
@@ -1053,7 +1076,7 @@ msgstr "Số sêri tự cấp"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "Tự động cấp số seri phù hợp cho hàng hóa được yêu cầu"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "Số sêri sau đây đã tồn tại hoặc không hợp lệ"
@@ -1082,10 +1105,10 @@ msgstr "Lý do loại bỏ đầu ra bản dựng"
 msgid "Location for completed build outputs"
 msgstr "Vị trí cho đầu ra bản dựng hoàn thiện"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "Trạng thái"
 
@@ -1270,8 +1293,8 @@ msgstr "Tên hàng hoá BOM"
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr "Sản phẩm nhà cung cấp"
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr "Cho phép biến thể"
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "Mục BOM"
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr "Phân kho"
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr "Bật đơn hàng"
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr "Đang sản xuất"
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr "Kho ngoài"
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "Số hàng tồn"
 
@@ -1356,7 +1379,7 @@ msgstr "Đã hủy"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "Hoàn thành"
 
@@ -1405,536 +1428,536 @@ msgstr "Mã tiền tệ không đúng"
 msgid "No plugin"
 msgstr "Không phần mở rộng"
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "Đã cập nhật"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "Nhãn thời gian của lần cập cuối cùng"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "Mã dự án duy nhất"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "Mô tả dự án"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr "Người dùng hoặc nhóm có trách nhiệm với dự án này"
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "Giá trị cài đặt"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr "Giá trị đã chọn không hợp lệ"
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr "Giá trị phải là kiểu boolean"
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr "Giá trị phải là một số nguyên dương"
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr "Chuỗi khóa phải duy nhất"
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "Người dùng"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr "Số lượng giá phá vỡ"
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "Giá"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr "Đơn vị giá theo số lượng cụ thể"
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr "Đầu mối"
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr "Đầu mối tại điểm webhook được nhận"
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr "Tên của webhook này"
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "Hoạt động"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr "Webhook có hoạt động không"
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr "Chữ ký số"
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr "Chữ ký số để truy cập"
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "Bí mật"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr "Mã bí mật dùng chung cho HMAC"
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr "Mã Tin nhắn"
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr "Định danh duy nhất cho tin nhắn này"
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr "Máy chủ"
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr "Mãy chủ từ tin nhắn này đã được nhận"
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr "Đầu mục"
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr "Đầu mục tin nhắn"
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr "Thân"
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr "Thân tin nhắn này"
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr "Đầu mối của tin nhắn này đã nhận được"
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr "Làm việc vào"
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr "Công việc trong tin nhắn này đã kết thúc?"
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr "Mã"
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "Tiêu đề"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "Liên kết"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "Đã công bố"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "Tác giả"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "Tóm tắt"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr "Đọc"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr "Tin này đã được đọc?"
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "Hình ảnh"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "Tệp ảnh"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr ""
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr ""
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr ""
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr ""
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr "Tên đơn vị phải là một định danh hợp lệ"
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr "Tên đơn vị"
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr "Biểu tượng"
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr "Biểu tượng đơn vị tùy chọn"
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr "Định nghĩa"
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr "Định nghĩa đơn vị"
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "Đính kèm"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "Tập tin bị thiếu"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "Thiếu liên kết bên ngoài"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "Chọn file đính kèm"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "Bình luận"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr ""
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr ""
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr ""
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr ""
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr ""
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr ""
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr ""
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr ""
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr ""
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr ""
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr ""
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "Giá trị"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr ""
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr ""
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr ""
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr ""
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr ""
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr ""
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr ""
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr ""
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr ""
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr ""
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr ""
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr ""
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "Đã tạo"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr "Cập nhật lần cuối"
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr ""
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr "Dữ liệu"
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr ""
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr ""
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr ""
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr ""
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr ""
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr "Ngữ cảnh"
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr ""
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr ""
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr ""
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr "Kết quả"
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr ""
 
@@ -1956,7 +1979,7 @@ msgstr "{verbose_name} đã bị hủy"
 msgid "A order that is assigned to you was canceled"
 msgstr "Một đơn đặt từng được phân công cho bạn đã bị hủy bỏ"
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr "Mục đã nhận"
 
@@ -2036,7 +2059,7 @@ msgstr "Đối số từ khóa công việc"
 msgid "Filename"
 msgstr "Tên tập tin"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr ""
 
@@ -2384,8 +2407,8 @@ msgstr "Sao chéo mẫu tham số danh mục"
 msgid "Copy category parameter templates when creating a part"
 msgstr "Sao chéo mẫu tham số danh mục khi tạo 1 sản phẩm"
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "Mẫu"
@@ -2398,8 +2421,8 @@ msgstr "Sản phẩm là mẫu bởi mặc định"
 msgid "Parts can be assembled from other components by default"
 msgstr "Sản phẩm có thể lắp giáp từ thành phần khác theo mặc định"
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "Thành phần"
 
@@ -2415,7 +2438,7 @@ msgstr "Có thể mua"
 msgid "Parts are purchaseable by default"
 msgstr "Sản phẩm mặc định có thể mua được"
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr "Có thể bán"
 
@@ -2619,8 +2642,8 @@ msgstr ""
 msgid "Log errors which occur when generating reports"
 msgstr ""
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "Khổ giấy"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr ""
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "Nhà sản xuất"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "Doanh nghiêp"
 
@@ -3497,8 +3520,8 @@ msgstr "Số điện thoại liên hệ"
 msgid "Contact email address"
 msgstr "Địa chỉ email liên hệ"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "Liên hệ"
 
@@ -3542,7 +3565,7 @@ msgstr "Công ty này có sản xuất sản phẩm?"
 msgid "Default currency used for this company"
 msgstr "Tiền tệ mặc định dùng cho công ty này"
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "Địa chỉ"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr "Chọn nhà sản xuất"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr ""
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr "Sản phẩm nhà sản xuất đã liên kết phải tham chiếu với sản phẩm cơ bản tương tự"
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "Nhà cung cấp"
 
@@ -3713,7 +3736,7 @@ msgstr "Nhà cung cấp"
 msgid "Select supplier"
 msgstr "Chọn nhà cung cấp"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr "Đơn vị quản lý kho nhà cung cấp"
 
@@ -3733,7 +3756,7 @@ msgstr "URL cho liên kết sản phẩm của nhà cung cấp bên ngoài"
 msgid "Supplier part description"
 msgstr "Mô tả sản phẩm nhà cung cấp"
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr "Tiền tệ mặc định được sử dụng cho nhà cung cấp này"
 msgid "Company Name"
 msgstr ""
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr "Còn hàng"
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr ""
@@ -3841,10 +3888,6 @@ msgstr "Đã đặt"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr ""
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "Tập tin dữ liệu"
@@ -3925,7 +3968,7 @@ msgstr ""
 msgid "Errors"
 msgstr ""
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr "Hợp lệ"
 
@@ -4013,51 +4056,51 @@ msgstr ""
 msgid "Value must be a valid dictionary object"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr "Không rõ"
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr ""
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr ""
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr ""
 
@@ -4117,7 +4160,7 @@ msgstr ""
 msgid "Order Reference"
 msgstr "Tham chiếu đơn đặt"
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr ""
 
@@ -4125,7 +4168,7 @@ msgstr ""
 msgid "Has Project Code"
 msgstr ""
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr "Tạo bởi"
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr ""
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr "Đặt hàng"
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr ""
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr "Sản phẩm nội bộ"
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr ""
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "Đã hoàn thành"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr "Đơn hàng"
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr "Đơn hàng"
 msgid "Sales Order"
 msgstr "Đơn đặt hàng"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr "Đơn hàng trả lại"
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "Tổng tiền"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr "Tổng tiền cho đơn hàng hàng"
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr "Tiền tệ đơn đặt hàng"
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr "Tiền tệ cho đơn đặt này (để trống để sử dụng tiền mặc định)"
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr "Liên hệ không phù hợp với doanh nghiệp đã chọn"
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr "Mô tả đơn đặt (tùy chọn)"
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr "Mã dự án đã chọn cho đơn đặt hàng này"
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr "Liên kết đến trang bên ngoài"
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "Ngày mục tiêu"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr "Ngày mong muốn giao được hàng. Đơn đặt sẽ quá hạn sau ngày này."
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr "Người dùng hoặc nhóm có trách nhiệm với đơn đặt này"
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr "Đầu mối liên hệ của đơn đặt này"
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr "Địa chỉ công ty cho đơn đặt này"
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr "Mã đặt hàng"
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr "Trạng thái đơn đặt mua"
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr "Doanh nghiệp từ những hàng hóa đang được đặt mua"
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr "Tham chiếu nhà cung cấp"
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr "Mã tham chiếu đơn đặt nhà cung cấp"
-
-#: order/models.py:584
-msgid "received by"
-msgstr "nhận bởi"
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr "Ngày phát hành"
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr "Ngày đặt hàng đã phát hành"
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr "Người dùng hoặc nhóm có trách nhiệm với đơn đặt này"
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr "Đầu mối liên hệ của đơn đặt này"
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr "Địa chỉ công ty cho đơn đặt này"
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr "Mã đặt hàng"
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr "Trạng thái đơn đặt mua"
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr "Doanh nghiệp từ những hàng hóa đang được đặt mua"
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr "Tham chiếu nhà cung cấp"
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr "Mã tham chiếu đơn đặt nhà cung cấp"
+
+#: order/models.py:546
+msgid "received by"
+msgstr "nhận bởi"
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr "Ngày đặt hàng đã được hoàn thiện"
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "Đích đến"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr "Nhà cung cấp sản phẩm phải trùng với nhà cung cấp PO"
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr "Số lượng phải là số dương"
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "Khách hàng"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr "Doanh nghiệp từ những hàng hóa đang được bán"
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr ""
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr "Tham chiếu khách hàng "
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr "Mã tham chiếu đơn đặt của khách hàng"
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr "Ngày giao hàng"
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr "vận chuyển bằng"
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr ""
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr ""
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr "Những đơn hàng đang mở thì sẽ được đánh dấu là hoàn thành"
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr "Đơn hàng không thể hoàn thành được vì vận chuyển chưa xong"
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr "Đơn hàng không thể hoàn thành được vì những khoản riêng chưa xong"
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr "Số lượng mặt hàng"
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr "Tham chiếu khoản riêng"
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr "Ghi chú khoản riêng"
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr "Ngày mục tiêu cho khoản riêng này (để trống để sử dụng ngày mục tiêu từ đơn đặt)"
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr "Mô tả khoản riêng (tùy chọn)"
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr "Ngữ cảnh bổ sung"
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr "Đơn giá"
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr ""
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr "Sản phẩm nhà cung cấp phải phù hợp với nhà cung cung cấp"
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr "Sản phẩm nhà cung cấp"
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr "Đã nhận"
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr "Số mục đã nhận"
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr "Giá mua"
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr "Giá đơn vị mua"
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr ""
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr ""
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr "Không thể gán sản phẩm ảo vào trong đơn đặt bán hàng"
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr "Chỉ có thể gán sản phẩm có thể bán vào đơn đặt bán hàng"
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "Giá bán"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr "Giá bán đơn vị"
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "Đã chuyển"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr "Số lượng đã vận chuyển"
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr ""
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr "Ngày vận chuyển"
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr "Ngày giao hàng"
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr "Ngày giao hàng của vận chuyển"
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr "Kiểm tra bởi"
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr "Người dùng đã kiểm tra vận chuyển này"
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr "Vận chuyển"
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr "Mã vận chuyển"
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr "Số theo dõi"
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr "Thông tin theo dõi vận chuyển"
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr "Mã hóa đơn"
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr "Số tham chiếu liên kết với hóa đơn"
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr "Vận đơn đã được gửi đi"
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr "Vận đơn chưa có hàng hóa được phân bổ"
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr ""
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr ""
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr "Hàng trong kho chưa được giao"
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr "Không thể phân bổ hàng hóa vào cùng với dòng với sản phẩm khác"
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr "Không thể phân bổ hàng hóa vào một dòng mà không có sản phẩm nào"
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr "Số lượng phân bổ không thể vượt quá số lượng của kho"
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr "Số lượng phải là 1 cho hàng hóa sêri"
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr "Đơn bán hàng không phù hợp với vận đơn"
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr "Vận đơn không phù hợp với đơn bán hàng"
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr "Dòng"
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr "Tham chiếu vận đơn của đơn hàng bán"
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr "Hàng hóa"
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr "Chọn hàng trong kho để phân bổ"
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr "Nhập số lượng phân kho"
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr "Tham chiếu đơn hàng trả lại"
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr "Công ty có hàng hóa sẽ được trả lại"
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr "Trạng thái đơn hàng trả lại"
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr ""
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr "Chọn hàng hóa để trả lại từ khách hàng"
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr "Ngày nhận được"
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr "Ngày mà hàng hóa trả lại đã được nhận"
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr "Kết quả"
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr "Kết quả cho hàng hóa dòng này"
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr "Chi phí gắn với hàng trả lại hoặc sửa chữa cho dòng hàng hóa này"
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr ""
 
@@ -4707,7 +4750,7 @@ msgstr ""
 msgid "Specify options for duplicating this order"
 msgstr ""
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr ""
 
@@ -4751,7 +4794,7 @@ msgstr ""
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr ""
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr ""
 
@@ -4787,7 +4830,7 @@ msgstr "Mục dòng"
 msgid "Line item does not match purchase order"
 msgstr "Mục dòng không phù hợp với đơn đặt mua"
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr "Chọn vị trí đích cho hàng hóa đã nhận"
 
@@ -4811,7 +4854,7 @@ msgstr "Nhập số sê ri cho hàng trong kho đang đến"
 msgid "Override packaging information for incoming stock items"
 msgstr ""
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr ""
 
@@ -4831,7 +4874,7 @@ msgstr "Mã vạch đã được dùng"
 msgid "An integer quantity must be provided for trackable parts"
 msgstr "Cần điền số nguyên cho sản phẩm có thể theo dõi"
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr "Dòng hàng hóa phải được cung cấp"
 
@@ -4891,32 +4934,32 @@ msgstr "Không tìm thấy số sê ri sau đây"
 msgid "The following serial numbers are unavailable"
 msgstr ""
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr "Dòng riêng biệt đơn hàng trả lại"
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr "Mã trạng thái mặt hàng"
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr "Line item không phù hợp với đơn hàng trả lại"
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr "Line item đã nhận được"
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr "Hàng hóa chỉ có thể được nhận theo đơn hàng đang trong tiến trình"
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr "Tiền tệ giá đồng hạng"
 
@@ -4970,107 +5013,103 @@ msgstr "Đơn bán hàng quá hạn"
 msgid "Sales order {so} is now overdue"
 msgstr "Đơn bán hàng {so} đã quá hạn"
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr ""
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr ""
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr ""
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr ""
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr ""
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr ""
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr ""
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr ""
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr ""
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr ""
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr ""
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr ""
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr ""
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr "Đơn đặt mua vào"
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr "Đơn hàng bán ra"
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr "Kho sản xuất bởi Đơn đặt bản dựng"
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr "Kho được yêu cầu cho đơn đặt bản dựng"
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr "Xác minh toàn bộ hóa đơn vật liệu"
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr "Tùy chọn này phải được chọn"
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr ""
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr ""
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr ""
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr ""
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr ""
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr ""
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr "Bạn không thể thay đổi cấu trúc nhóm sản phẩm này vì một số sản phẩm đã được gắn với nó rồi!"
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "Nguyên liệu"
 
@@ -5235,7 +5274,7 @@ msgstr "Từ khóa sản phẩm để cải thiện sự hiện diện trong k
 msgid "Part category"
 msgstr "Danh mục sản phẩm"
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr ""
@@ -5244,7 +5283,7 @@ msgstr ""
 msgid "Part revision or version number"
 msgstr "Số phiên bản hoặc bản duyệt lại sản phẩm"
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr "Phiên bản"
 
@@ -5276,7 +5315,7 @@ msgstr "Hết hạn mặc định"
 msgid "Expiry time (in days) for stock items of this part"
 msgstr "Thời gian hết hạn (theo ngày) để nhập kho hàng hóa cho sản phẩm này"
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr "Kho tối thiểu"
 
@@ -5613,7 +5652,7 @@ msgstr "Mô tả kiểm thử"
 msgid "Enter description for this test"
 msgstr "Nhập mô tả cho kiểm thử này"
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "Đã bật"
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr ""
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr "Chưa chọn sản phẩm"
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr "Chọn danh mục"
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr "Sản phẩm gốc"
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr "Chọn sản phẩm gốc để nhân bản"
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr "Sao chép ảnh"
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr "Sao chép hình ảnh từ sản phẩm gốc"
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr "Sao chép BOM"
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr "Sao chép định mức nguyên vật liệu từ sản phẩm gốc"
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr "Sao chép thông số"
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr "Sao chép thông tin tham số từ sản phẩm gốc"
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr "Sao chép ghi chú"
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr "Sao chép ghi chú từ sản phẩm gốc"
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr "Số liệu tồn kho ban đầu"
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr "Chỉ ra số lượng tồn kho ban đầu cho sản phẩm. Nếu điền là không, không thêm kho nào."
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr "Vị trí kho ban đầu"
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr "Chỉ định vị trí kho ban đầu cho sản phẩm này"
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr "Chọn nhà cung cấp (hoặc để trống để bỏ qua)"
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr "Chọn nhà sản xuất (hoặc để trống để bỏ qua)"
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr "Mã số nhà sản xuất"
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr "Công ty đã chọn không phải là nhà cung ứng hợp lệ"
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr "Công ty đã chọn không phải là nhà sản xuất hợp lệ"
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr "Mã số nhà sản xuất khớp với MPN này đã tồn tại"
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr "Mã số nhà cung cấp khớp với SKU này đã tồn tại"
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr "Tên danh mục"
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr "Đang dựng"
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr "Hàng trong kho"
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr ""
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "Nhà cung cấp"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr "Tổng số lượng"
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr ""
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr ""
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr "Nhân bản sản phẩm"
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr "Sao chép dữ liệu ban đầu từ sản phẩm khác"
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr "Số liệu kho ban đầu"
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr "Tạo sản phẩm với số lượng tồn kho ban đầu"
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr "Thông tin nhà cung cấp"
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr "Thêm thông tin nhà cung cấp ban đầu cho sản phẩm này"
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr "Sao chép thông số nhóm hàng"
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr "Sao chép mẫu tham số từ nhóm sản phẩm được chọn"
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr "Ảnh hiện có"
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr "Tên tệp của ảnh sản phẩm hiện hữu"
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr "Tệp hình ảnh không tồn tại"
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr "Hạn chế báo cáo kiểm kê với sản phẩm riêng biệt và sản phẩm biến thể bất kỳ"
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr "Hạn chế báo cáo kiểm kê với danh mục sản phẩm riêng biệt và danh mục con bất kỳ"
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr "Hạn chế báo cáo kiểm kê với vị trí kho riêng biệt và vị trí con bất kỳ"
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr "Ngoại trừ kho bên ngoài"
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr "Loại trừ hàng trong kho của vị trí bên ngoài"
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr "Tạo báo cáo"
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr "Tạo tệp báo cáo chứa dữ liệu kiểm kê đã tính toán"
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr "Cập nhật sản phẩm"
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr "Cập nhật sản phẩm cụ thể với dữ liệu kiểm kê đã tính"
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr "Chức năng kiểm kê chưa được bật"
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "Nhân công chạy ngầm kiểm tra thất bại"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr "Giá thấp nhất"
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr "Giá trị tính toán ghi đè cho giá tối thiểu"
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr "Tiền tế giá tối thiểu"
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr "Giá cao nhất"
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr "Giá trị tính toán ghi đè cho giá tối đa"
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr "Tiền tế giá tối đa"
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr "Cập nhật"
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr "Cập nhật giá cho sản phẩm này"
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr "Không thể chuyển đổi từ tiền tệ đã cung cấp cho {default_currency}"
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr "Giá tối thiểu không được lớn hơn giá tối đa"
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr "Giá tối đa không được nhỏ hơn giá tối thiểu"
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr ""
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr ""
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr "Có thể dựng"
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr "Chọn sản phẩm để sao chép định mức nguyên vật liệu"
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr "Xóa dữ liệu đã tồn tại"
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr "Xóa mục BOM đã tồn tại trước khi sao chép"
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr "Bao gồm thừa hưởng"
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr "Bao gồm mục BOM được thừa hưởng từ sản phẩm mẫu"
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr "Bỏ qua dòng không hợp lệ"
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr "Bật tùy chọn này để bỏ qua dòng không hợp lệ"
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr "Sao chép sản phẩm thay thế"
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr "Sao chép sản phẩm thay thế khi nhân bản hàng hóa BOM"
 
@@ -6336,28 +6367,28 @@ msgstr ""
 msgid "Not enough information"
 msgstr "Không đủ thông tin"
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr "Buộc phải nhập thông tin khác để nhận mục dòng này"
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr "Mục dòng đơn đặt mua đã nhận"
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr "Số lượng cần phân bổ"
 msgid "Label printing failed"
 msgstr "In nhãn thất bại"
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr ""
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr ""
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr ""
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr "Cung cấp hỗ trợ gốc cho mã vạch"
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr ""
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr ""
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr "Thông báo InvenTree"
@@ -6574,21 +6713,21 @@ msgstr "Trao đổi tiền tệ InvenTree"
 msgid "Default currency exchange integration"
 msgstr "Tích hợp trao đổi tiền tệ mặc định"
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr "Máy in nhãn InvenTree PDF"
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr "Cung cấp hỗ trợ gốc để in nhãn PDF"
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr "Chế độ gỡ lỗi"
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr "Bật chế độ gỡ lỗi - trả về mã HTML thuần thay vì PDF"
 
@@ -6608,47 +6747,47 @@ msgstr ""
 msgid "Options"
 msgstr ""
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr "Khổ giấy cho tờ nhãn"
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr "Bỏ qua nhãn"
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr "Bỏ qua số nhãn này khi in tờ nhãn"
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr "Viền"
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr "In một viền xung quanh từng nhãn"
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr "Ngang"
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr "In tờ viền theo khổ giấy nằm ngang"
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr "Máy in tờ nhãn InvenTree"
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr "Sắp xếp nhiều nhãn trong một tờ đơn"
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr "Nhãn quá lớn so với khổ giấy"
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr "Chưa tạo nhãn nào"
 
@@ -6793,7 +6932,7 @@ msgstr "Plugin có sẵn"
 msgid "Package Plugin"
 msgstr ""
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr "Phần bổ sung"
 
@@ -6801,21 +6940,21 @@ msgstr "Phần bổ sung"
 msgid "Method"
 msgstr "Phương thức"
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr "Không tìm thấy tác giả"
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr "Phần bổ sung '{p}' không tương thích với phiên bản InvenTree hiện tại {v}"
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr "Phần bổ sung yêu cầu ít nhất phiên bản {v}"
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr "Phần bổ sung yêu cầu tối đa phiên bản {v}"
@@ -7012,28 +7151,27 @@ msgstr ""
 msgid "Delete the plugin configuration from the database"
 msgstr ""
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr ""
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr ""
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr ""
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr ""
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr ""
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr ""
 
@@ -7053,172 +7191,136 @@ msgstr "Pháp lý"
 msgid "Letter"
 msgstr "Thư"
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr ""
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr "Tên mẫu"
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr ""
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr ""
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr ""
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr ""
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr "Mẫu tên tệp"
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr ""
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr ""
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr ""
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "Bộ lọc"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr ""
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr ""
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr "Khổ giấy cho báo cáo PDF"
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr "Tạo báo cáo theo hướng ngang"
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "Chiều rộng [mm]"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr "Chiều rộng nhãn, tính theo mm"
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "Chiều cao [mm]"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr "Chiều cao nhãn, tính theo mm"
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr ""
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr ""
-
-#: report/models.py:692
-msgid "Progress"
-msgstr ""
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr ""
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr ""
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr ""
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr ""
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr ""
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr ""
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr "Mẫu trích"
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr "Tệp báo cáo mẫu"
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr "Mô tả tệp báo cáo mẫu"
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr "Tài sản"
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr "Tệp báo cáo tài sản"
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr "Mô tả tệp báo cáo tài sản"
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr ""
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr ""
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr ""
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr ""
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr ""
 
@@ -7370,103 +7472,103 @@ msgstr ""
 msgid "Filter by parent location"
 msgstr ""
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr "Mã trạng thái"
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr "Địa điểm bên ngoài"
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr "Cây sản phẩm"
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr "Ngày hết hạn trước đó"
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr "Ngày hết hạn sau đó"
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr "Ế"
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr "Bắt buộc nhập số lượng"
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr "Phải cung cấp sản phẩm hợp lệ"
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr "Sản phẩm nhà cung cấp đã đưa không tồn tại"
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr "Sản phẩm nhà cung cấp có kích thước đóng gói được định nghĩa nhưng cờ use_pack_size chưa được thiết lập"
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr "Số sê-ri không thê được cung cấp cho sản phẩm không thể theo dõi"
 
@@ -7502,7 +7604,7 @@ msgstr "Chọn chủ sở hữu"
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr "Không thể đưa trực tiếp hàng trong kho vào bên trong vị trí kho hàng có cấu trúc, nhưng có thể đặt vào kho con."
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr "Bên ngoài"
 
@@ -8356,199 +8458,199 @@ msgstr "Đơn hàng bán"
 msgid "Return Orders"
 msgstr "Đơn hàng trả lại"
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr "Quyền hạn đã đặt"
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "Nhóm"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "Xem"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "Quyền để xem mục"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr "Thêm"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "Quyền để thêm mục"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "Đổi"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "Quyển để sửa mục"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "Xóa"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "Quyền để xóa mục"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "Tên người dùng"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "Tên"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "Họ người dùng"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "Họ"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "Tên người dùng"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "Địa chỉ email của người dùng"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "Nhân viên"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr "Người dùng có quyền nhân viên"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr "Superuser"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr "Người dùng này là superuser"
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "Tài khoản người dùng đang hoạt động"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "Bạn không có quyền thay đổi vai trò của người dùng này."
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "Chỉ có siêu người dùng là có thể tạo người dùng mới"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "Tài khoản của bạn đã được tạo."
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "Xin hãy sử dụng chức năng tạo lại mật khẩu để đăng nhập"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "Chào mừng đến với InvenTree"
 
diff --git a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po
index c2e1dcb8fd..e7e0dc2c34 100644
--- a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Chinese Simplified\n"
 "Language: zh_CN\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "未找到 API 端点"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr "提供了无效的单位"
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr "提供了无效的过滤器"
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
-msgstr "未找到要删除的项目"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
+msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "用户没有权限查阅当前模型。"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "不能将 {original} 转换到 {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "提供的数量无效"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr "无效的数值"
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "值' {name}' 未出现在模式格式中"
 msgid "Provided value does not match required pattern: "
 msgstr "提供的值与所需模式不匹配:"
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr "无法一次序列化超过 1000 个项目"
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "序號為空白"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "复制序列号"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr "无效群组: {group}"
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "组范围 {group} 超出了允许的数量 ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "未找到序列号"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "唯一序列号的数量 ({len(serials)}) 必须与数量匹配 ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "从这个值中删除 HTML 标签"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr "数据包含禁止的 markdown 内容"
 
@@ -339,7 +351,7 @@ msgstr "中文 (繁体)"
 msgid "Log in to the app"
 msgstr "登录应用程序"
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "电子邮件"
 
@@ -391,19 +403,19 @@ msgstr "同一個上層元件下不能有重複的名字"
 msgid "Invalid choice"
 msgstr "無效的選項"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "名稱"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "描述"
 msgid "Description (optional)"
 msgstr "描述(選填)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "路径"
 
@@ -510,28 +522,28 @@ msgstr "損失率不能超過100%"
 msgid "Invalid value for overage"
 msgstr "無效的損失值"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "订单状态"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "上層生產工單"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr "包含变体"
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr "包含变体"
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr "包含变体"
 msgid "Part"
 msgstr "零件"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "类别"
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr "排除树"
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "工單必須被取消才能被刪除"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "耗材"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "非必須項目"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "装配"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "追蹤中"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr "可测试"
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr "未结算订单"
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "已分配"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "可用数量"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "生产订单"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "生产订单"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr "装配物料清单尚未验证"
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr "无法为未激活的零件创建生产订单"
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr "无法为已解锁的零件创建生产订单"
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "無效的上層生產工單選擇"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "必须指定负责的用户或组"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "無法更改生產工單"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "生產工單代號"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "生產工單代號"
 msgid "Reference"
 msgstr "參考代號"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "關於生產工單的簡單說明(選填)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "這張生產工單對應的上層生產工單"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "選擇要生產的零件"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "銷售訂單代號"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "這張生產工單對應的銷售訂單"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "來源倉儲地點"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "選擇領取料件的倉儲地點(留白表示可以從任何地點領取)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "目標倉儲地點"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "选择已完成项目库存地点"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "生产数量"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "要生产的项目数量"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "已完成项目"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "已經完成的庫存品數量"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "生產狀態"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "生產狀態代碼"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "批号"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "此产出的批号"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "建立日期"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "目標完成日期"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "生產的預計完成日期。若超過此日期則工單會逾期。"
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "完成日期"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "完成者"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "發布者"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "發布此生產工單的使用者"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "負責人"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "負責此生產工單的使用者或群組"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "外部連結"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "外部URL連結"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "製造優先度"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "此生产订单的优先级"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "專案代碼"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "此生產工單隸屬的專案代碼"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr "未能卸载任务以完成生产分配"
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "生產工單 {build} 已經完成"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "一張生產工單已經完成"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr "对于可跟踪的零件,必须提供序列号"
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "未指定产出"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "产出已完成"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "产出与生产订单不匹配"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "數量必須大於零"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "数量不能大于输出数量"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "产出 {serial} 未通过所有必要测试"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr "生产订单行项目"
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "生产对象"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "生产对象"
 msgid "Quantity"
 msgstr "數量"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "生產工單所需數量"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "生产项必须指定产出,因为主零件已经被标记为可追踪的"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "分配的數量({q})不能超過可用的庫存數量({a})"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "庫存品項超額分配"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "分配的數量必須大於零"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "有序號的品項數量必須為1"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "選擇的庫存品項和BOM的項目不符"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "選擇的庫存品項和BOM的項目不符"
 msgid "Stock Item"
 msgstr "庫存品項"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "來源庫存項目"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "要分配的庫存數量"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "安裝到"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "目的庫存品項"
 
@@ -1034,10 +1057,10 @@ msgstr "输出产出的序列号"
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "地點"
 
@@ -1053,7 +1076,7 @@ msgstr "自動分配序號"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "自動為需要項目分配對應的序號"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "序號已存在或無效"
@@ -1082,10 +1105,10 @@ msgstr "废品产出的原因"
 msgid "Location for completed build outputs"
 msgstr "已完成删除的库存地点"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "狀態"
 
@@ -1270,8 +1293,8 @@ msgstr "物料清单零件名称"
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr "供应商零件"
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr "允许变体"
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "物料清单项"
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr "分配库存"
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr "已订购"
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr "生产中"
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr "外部库存"
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "可用库存"
 
@@ -1356,7 +1379,7 @@ msgstr "已取消"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "完成"
 
@@ -1405,536 +1428,536 @@ msgstr "未提供有效的货币代码"
 msgid "No plugin"
 msgstr "暂无插件"
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "已是最新"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "最后更新时间戳"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "唯一项目编码"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "项目描述"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr "负责此项目的用户或群组"
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr "设置密钥"
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "设定值"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr "所选值不是一个有效的选项"
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr "该值必须是布尔值"
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr "该值必须为整数"
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr "必须是有效数字"
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr "值未通过验证检查"
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr "键字符串必须是唯一的"
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "使用者"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr "批发价数量"
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "价格"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr "指定数量的单位价格"
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr "端点"
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr "接收此网络钩子的端点"
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr "此网络钩子的名称"
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "激活"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr "网络钩子是否已启用"
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr "令牌"
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr "访问令牌"
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "密钥"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr "HMAC共享密钥"
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr "消息ID"
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr "此邮件的唯一标识符"
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr "主机"
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr "接收此消息的主机"
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr "标题"
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr "此消息的标题"
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr "正文"
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr "此消息的正文"
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr "接收此消息的终点"
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr "工作于"
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr "这条消息的工作完成了吗?"
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr "标识"
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "标题"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "連結"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "已发布"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "作者"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "摘要"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr "阅读"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr "这条新闻被阅读了吗?"
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "图像"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "图像文件"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr "此图像的目标模型类型"
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr "此图像的目标型号ID"
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr "自定义单位"
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr "单位符号必须唯一"
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr "单位名称必须是有效的标识符"
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr "单位名称"
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr "符号"
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr "可选单位符号"
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr "定义"
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr "单位定义"
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "附件"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "缺少檔案"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "缺少外部連結"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "選擇附件"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "註解"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr "附件评论"
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr "上传日期"
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr "上传文件的日期"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr "文件大小"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr "文件大小,以字节为单位"
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr "为附件指定的模型类型无效"
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr "自定状态"
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr "定制状态"
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr "参考状态设置"
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr "使用此自定义状态扩展状态的状态集"
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr "逻辑密钥"
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr "等同于商业逻辑中自定义状态的状态逻辑键"
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "值"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr "状态名"
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr "标签"
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr "将在前端显示的标签"
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr "颜色"
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr "将在前端显示颜色"
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr "型号"
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr "该状态关联的模型"
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr "必须选定模型"
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr "必须选取密钥"
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr "必须选中逻辑密钥"
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr "密钥必须不同于逻辑密钥"
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr "密钥必须不同于参考状态的逻辑密钥"
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr "逻辑密钥必须在参考状态的逻辑键中"
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr "已锁定"
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "已创建"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr "最近更新"
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr "扫描条码"
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr "数据"
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr "条码数据"
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr "扫描条形码"
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr "时间戳"
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr "扫描条形码的日期和时间"
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr "处理条形码的 URL 终点"
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr "上下文"
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr "扫描条形码的上下文数据"
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr "响应"
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr "扫描条形码的响应数据"
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr "结果"
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr "条码扫描成功吗?"
 
@@ -1956,7 +1979,7 @@ msgstr "{verbose_name} 已取消"
 msgid "A order that is assigned to you was canceled"
 msgstr "分配给您的订单已取消"
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr "收到的物品"
 
@@ -2036,7 +2059,7 @@ msgstr "任务关键词参数"
 msgid "Filename"
 msgstr "檔案名稱"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr "模型类型"
 
@@ -2384,8 +2407,8 @@ msgstr "复制类别参数模板"
 msgid "Copy category parameter templates when creating a part"
 msgstr "创建零件时复制类别参数模板"
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "模板"
@@ -2398,8 +2421,8 @@ msgstr "零件默认为模板"
 msgid "Parts can be assembled from other components by default"
 msgstr "默认情况下,元件可由其他零件组装而成"
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "组件"
 
@@ -2415,7 +2438,7 @@ msgstr "可购买"
 msgid "Parts are purchaseable by default"
 msgstr "默认情况下可购买零件"
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr "可销售"
 
@@ -2619,8 +2642,8 @@ msgstr "日志错误报告"
 msgid "Log errors which occur when generating reports"
 msgstr "记录生成报告时出现的错误"
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "页面大小"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr "供应商已激活"
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "制造商"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "公司"
 
@@ -3497,8 +3520,8 @@ msgstr "联系电话"
 msgid "Contact email address"
 msgstr "联系人电子邮箱地址"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "联系人"
 
@@ -3542,7 +3565,7 @@ msgstr "这家公司生产零件吗?"
 msgid "Default currency used for this company"
 msgstr "此公司使用的默认货币"
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "地址"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr "选择制造商"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr "制造商零件编号"
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr "链接的制造商零件必须引用相同的基础零件"
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "供应商"
 
@@ -3713,7 +3736,7 @@ msgstr "供应商"
 msgid "Select supplier"
 msgstr "选择供应商"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr "供应商库存管理单位"
 
@@ -3733,7 +3756,7 @@ msgstr "外部供应商零件链接的URL"
 msgid "Supplier part description"
 msgstr "供应商零件说明"
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr "此供应商使用的默认货币"
 msgid "Company Name"
 msgstr "公司名称"
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr "有库存"
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr "自定义状态密钥"
@@ -3841,10 +3888,6 @@ msgstr "放置"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr "导出格式无效"
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "数据文件"
@@ -3925,7 +3968,7 @@ msgstr "原始行数据"
 msgid "Errors"
 msgstr "错误"
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr "有效"
 
@@ -4013,51 +4056,51 @@ msgstr "数据文件包含的行太多"
 msgid "Value must be a valid dictionary object"
 msgstr "值必须是有效的字典对象"
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr "拷贝"
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr "每个标签要打印的份数"
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr "已连接"
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr "未知"
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr "正在打印"
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr "无媒体"
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr "卡纸"
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr "已断开连接"
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr "标签打印机"
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr "直接打印各种物品的标签。"
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr "打印机位置"
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr "将打印机定位到特定位置"
 
@@ -4117,7 +4160,7 @@ msgstr "配置类型"
 msgid "Order Reference"
 msgstr "订单参考"
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr "未完成"
 
@@ -4125,7 +4168,7 @@ msgstr "未完成"
 msgid "Has Project Code"
 msgstr "有项目编码"
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr "创建人"
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr "有定价"
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr "订单"
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr "订单完成"
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr "内部零件"
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr "订单待定"
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "已完成"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr "有配送"
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr "采购订单"
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr "采购订单"
 msgid "Sales Order"
 msgstr "销售订单"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr "退货订单"
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "总价格"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr "此订单的总价"
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr "订单货币"
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr "此订单的货币 (留空以使用公司默认值)"
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr "联系人与所选公司不匹配"
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr "订单描述 (可选)"
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr "为此订单选择项目编码"
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr "链接到外部页面"
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "预计日期"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr "订单交付的预期日期。订单将在此日期后过期。"
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr "负责此订单的用户或组"
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr "此订单的联系人"
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr "此订单的公司地址"
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr "订单参考"
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr "采购订单状态"
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr "订购物品的公司"
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr "供应商参考"
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr "供应商订单参考代码"
-
-#: order/models.py:584
-msgid "received by"
-msgstr "接收人"
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr "签发日期"
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr "订单发出日期"
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr "负责此订单的用户或组"
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr "此订单的联系人"
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr "此订单的公司地址"
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr "订单参考"
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr "采购订单状态"
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr "订购物品的公司"
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr "供应商参考"
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr "供应商订单参考代码"
+
+#: order/models.py:546
+msgid "received by"
+msgstr "接收人"
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr "订单完成日期"
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "目的地"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr "接收物品的目标"
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr "零件供应商必须与采购订单供应商匹配"
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr "数量必须是正数"
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "客户"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr "出售物品的公司"
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr "销售订单状态"
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr "客户参考 "
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr "客户订单参考代码"
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr "发货日期"
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr "发货人"
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr "订单已完成"
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr "订单已取消"
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr "只有未结订单才能标记为已完成"
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr "由于发货不完整,订单无法完成"
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr "由于缺货,订单无法完成"
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr "订单无法完成,因为行项目不完整"
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr "项目数量"
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr "行项目参考"
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr "行项目注释"
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr "此行项目的目标日期 (留空以使用订单中的目标日期)"
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr "行项目描述 (可选)"
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr "此行的附加上下文"
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr "单位价格"
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr "采购订单行项目"
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr "供应商零件必须与供应商匹配"
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr "供应商零件"
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr "已接收"
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr "收到的物品数量"
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr "采购价格"
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr "每单位的采购价格"
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr "采购订单附加行"
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr "销售订单行项目"
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr "虚拟零件不能分配给销售订单"
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr "只有可销售的零件才能分配给销售订单"
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "售出价格"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr "单位售出价格"
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "已配送"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr "发货数量"
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr "销售订单发货"
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr "发货日期"
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr "送达日期"
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr "装运交货日期"
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr "审核人"
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr "检查此装运的用户"
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr "配送"
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr "配送单号"
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr "跟踪单号"
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr "配送跟踪信息"
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr "发票编号"
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr "相关发票的参考号"
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr "货物已发出"
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr "发货没有分配库存项目"
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr "销售订单加行"
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr "销售订单分配"
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr "库存项目尚未分配"
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr "无法将库存项目分配给具有不同零件的行"
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr "无法将库存分配给没有零件的生产线"
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr "分配数量不能超过库存数量"
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr "序列化库存项目的数量必须为1"
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr "销售订单与发货不匹配"
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr "发货与销售订单不匹配"
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr "行"
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr "销售订单发货参考"
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr "项目"
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr "选择要分配的库存项目"
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr "输入库存分配数量"
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr "退货订单参考"
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr "退回物品的公司"
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr "退货订单状态"
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr "退货订单行项目"
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr "选择要从客户处退回的商品"
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr "接收日期"
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr "收到此退货的日期"
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr "结果"
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr "该行项目的结果"
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr "与此行项目的退货或维修相关的成本"
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr "退货订单附加行"
 
@@ -4707,7 +4750,7 @@ msgstr "复制订单"
 msgid "Specify options for duplicating this order"
 msgstr "指定复制此订单的选项"
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr "订单ID不正确"
 
@@ -4751,7 +4794,7 @@ msgstr "合并项目"
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr "将具有相同零件、目的地和目标日期的项目合并到一个行项目中"
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr "库存量单位"
 
@@ -4787,7 +4830,7 @@ msgstr "行项目"
 msgid "Line item does not match purchase order"
 msgstr "行项目与采购订单不匹配"
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr "为收到的物品选择目的地位置"
 
@@ -4811,7 +4854,7 @@ msgstr "输入入库库存项目的序列号"
 msgid "Override packaging information for incoming stock items"
 msgstr "覆盖传入库存项目的包装资料"
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr "传入库存项目的附加说明"
 
@@ -4831,7 +4874,7 @@ msgstr "条形码已被使用"
 msgid "An integer quantity must be provided for trackable parts"
 msgstr "必须为可跟踪零件提供整数数量"
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr "必须提供行项目"
 
@@ -4891,32 +4934,32 @@ msgstr "未找到以下序列号的匹配项"
 msgid "The following serial numbers are unavailable"
 msgstr "以下序列号不可用"
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr "退货订单行项目"
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr "库存项状态代码"
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr "行项目与退货订单不匹配"
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr "行项目已收到"
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr "只能根据正在进行的订单接收物品"
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr "行价格货币"
 
@@ -4970,107 +5013,103 @@ msgstr "逾期销售订单"
 msgid "Sales order {so} is now overdue"
 msgstr "销售订单 {so} 已逾期"
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr "已加星标"
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr "按星标类别筛选"
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr "深度"
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr "按类别深度筛选"
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr "顶级"
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr "按顶级类别筛选"
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr "级联"
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr "在筛选结果中包含子类别"
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr "父类"
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr "按父类别筛选"
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr "排除树"
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr "排除指定类别下的子类别"
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr "有结果"
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr "收到的采购订单"
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr "外发销售订单"
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr "建造生产订单产生的库存"
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr "生产订单所需的库存"
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr "验证整个物料清单"
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr "必须选择此项"
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr "是修订版本"
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr "有修订版本"
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr "物料清单合规"
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr "装配部份是可测试的"
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr "组件部份是可测试的"
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr "使用"
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr "您不能使这个零件类别结构化,因为有些零件已经分配给了它!"
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "零件"
 
@@ -5235,7 +5274,7 @@ msgstr "提高搜索结果可见性的零件关键字"
 msgid "Part category"
 msgstr "零件类别"
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr "内部零件号 IPN"
@@ -5244,7 +5283,7 @@ msgstr "内部零件号 IPN"
 msgid "Part revision or version number"
 msgstr "零件修订版本或版本号"
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr "版本"
 
@@ -5276,7 +5315,7 @@ msgstr "默认到期"
 msgid "Expiry time (in days) for stock items of this part"
 msgstr "此零件库存项的过期时间 (天)"
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr "最低库存"
 
@@ -5613,7 +5652,7 @@ msgstr "测试说明"
 msgid "Enter description for this test"
 msgstr "输入测试的描述"
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "已启用"
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr "使用此模板的零件数"
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr "没有选定零件"
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr "选择类别"
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr "原始零件"
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr "选择要复制的原始零件"
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr "复制图片"
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr "从原零件复制图片"
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr "复制物料清单"
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr "从原始零件复制材料清单"
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr "复制参数"
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr "从原始零件复制参数数据"
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr "复制备注"
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr "从原始零件复制备注"
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr "初始化库存数量"
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr "指定此零件的初始库存数量。如果数量为零,则不添加任何库存。"
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr "初始化库存地点"
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr "初始化指定此零件的库存地点"
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr "选择供应商(或为空以跳过)"
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr "选择制造商(或为空)"
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr "制造商零件号"
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr "所选公司不是一个有效的供应商"
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr "所选公司不是一个有效的制造商"
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr "与此制造商零件编号 (MPN) 的相匹配的制造商零件已存在"
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr "匹配此库存单位 (SKU) 的供应商零件已存在"
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr "类别名称"
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr "正在生产"
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr "库存项"
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr "修订"
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "供应商"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr "库存总量"
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr "未分配的库存"
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr "变体库存"
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr "重复零件"
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr "从另一个零件复制初始数据"
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr "初始库存"
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr "创建具有初始库存数量的零件"
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr "供应商信息"
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr "添加此零件的初始供应商信息"
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr "复制类别参数"
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr "从选择的零件复制参数模版"
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr "现有的图片"
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr "现有零件图片的文件名"
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr "图片不存在"
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr "限制盘点报告到某个特定零件以及任何变体零件"
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr "限制盘点报告到某个特定零件类别以及任何子类别"
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr "限制盘点报告到某个特定零件库存地点以及任何子位置"
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr "排除外部库存"
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr "排除外部位置的库存项"
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr "生成报告"
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr "生成包含计算出来的盘点数据的报告文件"
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr "更新零件"
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr "使用计算出的盘点数据更新指定零件"
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr "盘点功能未启用"
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "后台执行器检查失败"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr "最低价格"
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr "覆盖已计算的最低价格值"
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr "最低价格货币"
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr "最高价格"
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr "覆盖已计算的最高价格值"
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr "最高价格货币"
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr "更新"
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr "更新这个零件的价格"
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr "无法将所提供的货币转换为 {default_currency}"
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr "最低价格不能高于最高价格。"
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr "最高价格不能低于最低价格"
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr "选择父装配"
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr "选择零部件"
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr "可以创建"
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr "选择要复制物料清单的零件"
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr "移除现有数据"
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr "复制前删除现有的物料清单项目"
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr "包含继承的"
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr "包含从模板零件继承的物料清单项目"
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr "跳过无效行"
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr "启用此选项以跳过无效行"
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr "复制替代品零件"
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr "复制物料清单项目时复制替代品零件"
 
@@ -6336,28 +6367,28 @@ msgstr "库存项已分配到销售订单"
 msgid "Not enough information"
 msgstr "没有足够的信息"
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr "需要更多信息以接收行项目"
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr "已收到采购订单行项目"
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr "待分配数"
 msgid "Label printing failed"
 msgstr "标签打印失败"
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr "渲染标签到 PDF 时出错"
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr "渲染标签到 HTML 时出错"
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr "没有要打印的项目"
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr "提供条形码本地支持"
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr "短条形码前缀"
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr "自定义用于短条形码的前缀,可能对有多个InvenTree实例的环境有用。"
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr "Inventree 通知"
@@ -6574,21 +6713,21 @@ msgstr "InvenTree 货币兑换"
 msgid "Default currency exchange integration"
 msgstr "默认货币兑换集成"
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr "InvenTree PDF 标签打印机"
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr "为打印 PDF 标签提供本机支持"
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr "Debug模式"
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr "启用Debug模式 - 返回原始的 HTML 而不是 PDF"
 
@@ -6608,47 +6747,47 @@ msgstr "最近使用"
 msgid "Options"
 msgstr "选项"
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr "标签页大小"
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr "跳过标签"
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr "打印标签页时跳过标签的数量"
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr "边框"
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr "打印每个标签的边框"
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr "横屏模式"
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr "在横屏模式下打印标签表"
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr "库存树标签工作表"
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr "单张纸上的组合多个标签"
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr "标签大过页面"
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr "没有生成标签"
 
@@ -6793,7 +6932,7 @@ msgstr "内置插件"
 msgid "Package Plugin"
 msgstr "软件包插件"
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr "插件"
 
@@ -6801,21 +6940,21 @@ msgstr "插件"
 msgid "Method"
 msgstr "方法"
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr "未找到作者"
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr "插件 '{p}' 与当前 InvenTree 版本{v} 不兼容"
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr "插件所需最低版本 {v}"
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr "插件所需最高版本 {v}"
@@ -7012,28 +7151,27 @@ msgstr "删除配置"
 msgid "Delete the plugin configuration from the database"
 msgstr "从数据库中删除插件配置"
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr "项目"
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr "插件未找到"
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr "插件未激活"
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr "插件不支持标签打印"
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr "无效的标签尺寸"
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr "没有有效的项目提供到模板"
 
@@ -7053,172 +7191,136 @@ msgstr "法律"
 msgid "Letter"
 msgstr "字母"
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr "已存在具有此名称的模板"
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr "模版名称"
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr "模板说明"
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr "修订编号 (自动增量)"
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr "打印时附加到模型"
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr "打印时将报告输出保存为附件与链接模型实例"
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr "文件名样式"
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr "生成文件名模式"
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr "模板已启用"
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr "模版的目标模型类型"
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "筛选器"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr "模版查询筛选器 (逗号分隔的键值对列表)"
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr "模板包文件"
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr "PDF 报告的页面大小"
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr "横向渲染报告"
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "宽度 [mm]"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr "标签宽度,以毫米为单位。"
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "高度 [mm]"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr "标签高度,以毫米为单位。"
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr "要处理的项目数量"
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr "报告生成完成"
-
-#: report/models.py:692
-msgid "Progress"
-msgstr "进度"
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr "报告生成进度"
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr "报告模板"
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr "输出文件"
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr "生成输出文件"
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr "标签输出插件"
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr "标签模板"
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr "代码片段"
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr "报告代码片段文件"
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr "代码片段文件描述"
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr "资产"
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr "报告资产文件"
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr "资产文件描述"
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr "选择报表模板"
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr "要包含在报告中的项目主键列表"
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr "选择标签模板"
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr "打印插件"
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr "选择用于标签打印的插件"
 
@@ -7370,103 +7472,103 @@ msgstr "上级地点"
 msgid "Filter by parent location"
 msgstr "按上级位置筛选"
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr "零件名称 (不区分大小写)"
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr "零件名称包含 (不区分大小写)"
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr "零件名称 (正则表达式)"
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr "内部零件号 (不区分大小写)"
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr "内部零件号 (不区分大小写)"
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr "内部零件号 (正则表达式)"
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr "最低库存"
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr "最大库存"
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr "状态代码"
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr "外部地点"
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr "零件树"
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr "过期日期前"
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr "过期日期后"
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr "过期"
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr "请先输入数量"
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr "必须提供有效的零件"
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr "给定的供应商零件不存在"
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr "供应商零件有定义的包装大小,但 use_pack_size 标志未设置"
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr "不能为不可跟踪的零件提供序列号"
 
@@ -7502,7 +7604,7 @@ msgstr "选择所有者"
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr "库存项可能不直接位于结构库存地点,但可能位于其子地点。"
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr "外部"
 
@@ -8356,199 +8458,199 @@ msgstr "销售订单"
 msgid "Return Orders"
 msgstr "退货订单"
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr "权限设置"
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "组"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "查看"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "查看项目的权限"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr "添加"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "添加项目的权限"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "更改"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "编辑项目的权限"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "删除"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "删除项目的权限"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "用户名"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "名"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "用户的名字(不包括姓氏)"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "姓"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "用户的姓氏"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "用户的电子邮件地址"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "职员"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr "此用户是否拥有员工权限"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr "超级用户"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr "此用户是否为超级用户"
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "此用户帐户是否已激活"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "您沒有更改這個使用者角色的權限"
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "只有管理員帳戶可以建立新的使用者"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "您的帳號已經建立完成。"
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "請使用重設密碼功能來登入"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "欢迎使用 InventTree"
 
diff --git a/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po
index 58f543faa2..52d36acb52 100644
--- a/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po
+++ b/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-15 13:54+0000\n"
-"PO-Revision-Date: 2025-03-15 13:56\n"
+"POT-Creation-Date: 2025-03-18 00:36+0000\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Chinese Traditional\n"
 "Language: zh_TW\n"
@@ -25,19 +25,31 @@ msgstr ""
 msgid "API endpoint not found"
 msgstr "未找到 API 端點"
 
-#: InvenTree/api.py:462
+#: InvenTree/api.py:402
+msgid "List of items or filters must be provided for bulk operation"
+msgstr ""
+
+#: InvenTree/api.py:409
+msgid "Items must be provided as a list"
+msgstr ""
+
+#: InvenTree/api.py:417
 msgid "Invalid items list provided"
 msgstr "提供了無效的單位"
 
-#: InvenTree/api.py:471
+#: InvenTree/api.py:423
+msgid "Filters must be provided as a dict"
+msgstr ""
+
+#: InvenTree/api.py:430
 msgid "Invalid filters provided"
 msgstr "提供了無效的過濾器"
 
-#: InvenTree/api.py:476
-msgid "No items found to delete"
-msgstr "未找到要刪除的項目"
+#: InvenTree/api.py:435
+msgid "No items match the provided criteria"
+msgstr ""
 
-#: InvenTree/api.py:609
+#: InvenTree/api.py:680
 msgid "User does not have permission to view this model"
 msgstr "用户沒有權限查閲當前模型。"
 
@@ -76,7 +88,7 @@ msgid "Could not convert {original} to {unit}"
 msgstr "不能將 {original} 轉換到 {unit}"
 
 #: InvenTree/conversion.py:208 InvenTree/conversion.py:222
-#: InvenTree/helpers.py:496 order/models.py:650 order/models.py:916
+#: InvenTree/helpers.py:501 order/models.py:605 order/models.py:871
 msgid "Invalid quantity provided"
 msgstr "提供的數量無效"
 
@@ -93,7 +105,7 @@ msgid "Invalid decimal value"
 msgstr ""
 
 #: InvenTree/fields.py:208 InvenTree/models.py:887 build/serializers.py:522
-#: build/serializers.py:597 company/models.py:834 order/models.py:1541
+#: build/serializers.py:597 company/models.py:834 order/models.py:1452
 #: part/models.py:3309
 #: report/templates/report/inventree_build_order_report.html:172
 #: stock/models.py:2629 stock/models.py:2753 stock/serializers.py:747
@@ -112,42 +124,42 @@ msgstr "值' {name}' 未出現在模式格式中"
 msgid "Provided value does not match required pattern: "
 msgstr "提供的值與所需模式不匹配:"
 
-#: InvenTree/helpers.py:500
+#: InvenTree/helpers.py:505
 msgid "Cannot serialize more than 1000 items at once"
 msgstr ""
 
-#: InvenTree/helpers.py:506
+#: InvenTree/helpers.py:511
 msgid "Empty serial number string"
 msgstr "序號為空白"
 
-#: InvenTree/helpers.py:535
+#: InvenTree/helpers.py:540
 msgid "Duplicate serial"
 msgstr "複製序列號"
 
-#: InvenTree/helpers.py:567 InvenTree/helpers.py:610 InvenTree/helpers.py:628
-#: InvenTree/helpers.py:635 InvenTree/helpers.py:654
+#: InvenTree/helpers.py:572 InvenTree/helpers.py:615 InvenTree/helpers.py:633
+#: InvenTree/helpers.py:640 InvenTree/helpers.py:659
 #, python-brace-format
 msgid "Invalid group: {group}"
 msgstr ""
 
-#: InvenTree/helpers.py:598
+#: InvenTree/helpers.py:603
 #, python-brace-format
 msgid "Group range {group} exceeds allowed quantity ({expected_quantity})"
 msgstr "組範圍 {group} 超出了允許的數量 ({expected_quantity})"
 
-#: InvenTree/helpers.py:664
+#: InvenTree/helpers.py:669
 msgid "No serial numbers found"
 msgstr "未找到序列號"
 
-#: InvenTree/helpers.py:669
+#: InvenTree/helpers.py:674
 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})"
 msgstr "唯一序列號的數量 ({len(serials)}) 必須與數量匹配 ({expected_quantity})"
 
-#: InvenTree/helpers.py:788
+#: InvenTree/helpers.py:793
 msgid "Remove HTML tags from this value"
 msgstr "從這個值中刪除 HTML 標籤"
 
-#: InvenTree/helpers.py:867
+#: InvenTree/helpers.py:872
 msgid "Data contains prohibited markdown content"
 msgstr ""
 
@@ -339,7 +351,7 @@ msgstr "中文 (繁體)"
 msgid "Log in to the app"
 msgstr ""
 
-#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:213
+#: InvenTree/magic_login.py:41 company/models.py:136 users/serializers.py:236
 msgid "Email"
 msgstr "電子郵件"
 
@@ -391,19 +403,19 @@ msgstr "同一個上層元件下不能有重複的名字"
 msgid "Invalid choice"
 msgstr "無效的選項"
 
-#: InvenTree/models.py:734 common/models.py:1310 common/models.py:1737
-#: common/models.py:1990 common/models.py:2115 common/serializers.py:485
+#: InvenTree/models.py:734 common/models.py:1311 common/models.py:1738
+#: common/models.py:1991 common/models.py:2116 common/serializers.py:485
 #: company/models.py:593 generic/states/serializers.py:20 machine/models.py:24
 #: part/models.py:998 part/models.py:3780 plugin/models.py:52
-#: report/models.py:172 stock/models.py:83
+#: report/models.py:145 stock/models.py:83
 msgid "Name"
 msgstr "名稱"
 
-#: InvenTree/models.py:740 build/models.py:257 common/models.py:108
-#: common/models.py:2122 common/models.py:2235 company/models.py:521
-#: company/models.py:825 order/models.py:343 order/models.py:1577
-#: part/models.py:1021 part/models.py:3795 report/models.py:178
-#: report/models.py:753 report/models.py:779
+#: InvenTree/models.py:740 build/models.py:218 common/models.py:109
+#: common/models.py:2123 common/models.py:2236 company/models.py:521
+#: company/models.py:825 order/models.py:342 order/models.py:1488
+#: part/models.py:1021 part/models.py:3795 report/models.py:151
+#: report/models.py:650 report/models.py:676
 #: report/templates/report/inventree_build_order_report.html:117
 #: stock/models.py:89
 msgid "Description"
@@ -413,7 +425,7 @@ msgstr "描述"
 msgid "Description (optional)"
 msgstr "描述(選填)"
 
-#: InvenTree/models.py:756 common/models.py:2288
+#: InvenTree/models.py:756 common/models.py:2289
 msgid "Path"
 msgstr "路徑"
 
@@ -510,28 +522,28 @@ msgstr "損失率不能超過100%"
 msgid "Invalid value for overage"
 msgstr "無效的損失值"
 
-#: build/api.py:37 order/api.py:101 order/api.py:222 order/serializers.py:126
+#: build/api.py:37 order/api.py:101 order/api.py:260 order/serializers.py:126
 msgid "Order Status"
 msgstr "訂單狀態"
 
-#: build/api.py:63 build/models.py:269
+#: build/api.py:63 build/models.py:230
 msgid "Parent Build"
 msgstr "上層生產工單"
 
-#: build/api.py:67 build/api.py:733 order/api.py:484 order/api.py:701
-#: order/api.py:1089 order/api.py:1316 stock/api.py:519
+#: build/api.py:67 build/api.py:763 order/api.py:505 order/api.py:722
+#: order/api.py:1095 order/api.py:1322 stock/api.py:521
 msgid "Include Variants"
 msgstr "包含變體"
 
-#: build/api.py:83 build/api.py:435 build/api.py:747 build/models.py:275
+#: build/api.py:83 build/api.py:465 build/api.py:777 build/models.py:236
 #: build/serializers.py:1254 build/serializers.py:1376
 #: build/serializers.py:1427 company/models.py:1044 company/serializers.py:432
-#: order/api.py:250 order/api.py:863 order/api.py:1102 order/models.py:1666
-#: order/models.py:1825 order/models.py:1826 part/api.py:1450 part/api.py:1518
-#: part/api.py:1825 part/models.py:417 part/models.py:3138 part/models.py:3282
+#: order/api.py:288 order/api.py:869 order/api.py:1108 order/models.py:1577
+#: order/models.py:1736 order/models.py:1737 part/api.py:1441 part/api.py:1509
+#: part/api.py:1816 part/models.py:417 part/models.py:3138 part/models.py:3282
 #: part/models.py:3430 part/models.py:3451 part/models.py:3473
 #: part/models.py:3609 part/models.py:3970 part/models.py:4242
-#: part/models.py:4608 part/serializers.py:1276 part/serializers.py:1920
+#: part/models.py:4608 part/serializers.py:1225 part/serializers.py:1871
 #: report/templates/report/inventree_bill_of_materials_report.html:110
 #: report/templates/report/inventree_bill_of_materials_report.html:137
 #: report/templates/report/inventree_build_order_report.html:109
@@ -540,7 +552,7 @@ msgstr "包含變體"
 #: report/templates/report/inventree_sales_order_report.html:27
 #: report/templates/report/inventree_sales_order_shipment_report.html:28
 #: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:532 stock/serializers.py:114 stock/serializers.py:162
+#: stock/api.py:534 stock/serializers.py:114 stock/serializers.py:162
 #: stock/serializers.py:472 stock/serializers.py:634 stock/serializers.py:939
 #: templates/email/build_order_completed.html:17
 #: templates/email/build_order_required_stock.html:17
@@ -549,9 +561,8 @@ msgstr "包含變體"
 msgid "Part"
 msgstr "零件"
 
-#: build/api.py:103 part/api.py:1532 part/models.py:1039 part/models.py:3501
-#: part/models.py:4079 part/serializers.py:496 part/serializers.py:1286
-#: stock/api.py:815
+#: build/api.py:103 part/api.py:1523 part/models.py:1039 part/models.py:3501
+#: part/models.py:4079 part/serializers.py:1235 stock/api.py:817
 msgid "Category"
 msgstr "類別"
 
@@ -612,90 +623,102 @@ msgstr ""
 msgid "Completed after"
 msgstr ""
 
-#: build/api.py:374
+#: build/api.py:245 order/api.py:216
+msgid "Min Date"
+msgstr ""
+
+#: build/api.py:268 order/api.py:235
+msgid "Max Date"
+msgstr ""
+
+#: build/api.py:293 part/api.py:223
+msgid "Exclude Tree"
+msgstr "排除樹"
+
+#: build/api.py:404
 msgid "Build must be cancelled before it can be deleted"
 msgstr "工單必須被取消才能被刪除"
 
-#: build/api.py:418 build/serializers.py:1392 part/models.py:4276
+#: build/api.py:448 build/serializers.py:1392 part/models.py:4276
 msgid "Consumable"
 msgstr "耗材"
 
-#: build/api.py:421 build/serializers.py:1395 part/models.py:4270
+#: build/api.py:451 build/serializers.py:1395 part/models.py:4270
 msgid "Optional"
 msgstr "非必須項目"
 
-#: build/api.py:424 common/setting/system.py:429 part/models.py:1170
-#: part/serializers.py:1667 part/serializers.py:1676 stock/api.py:585
+#: build/api.py:454 common/setting/system.py:429 part/models.py:1170
+#: part/serializers.py:1618 part/serializers.py:1627 stock/api.py:587
 msgid "Assembly"
 msgstr "裝配"
 
-#: build/api.py:427
+#: build/api.py:457
 msgid "Tracked"
 msgstr "追蹤中"
 
-#: build/api.py:430 build/serializers.py:1398 part/models.py:1188
+#: build/api.py:460 build/serializers.py:1398 part/models.py:1188
 msgid "Testable"
 msgstr "可測試"
 
-#: build/api.py:440 order/api.py:908
+#: build/api.py:470 order/api.py:914
 msgid "Order Outstanding"
 msgstr ""
 
-#: build/api.py:450 order/api.py:867
+#: build/api.py:480 order/api.py:873
 msgid "Allocated"
 msgstr "已分配"
 
-#: build/api.py:460 company/models.py:889 company/serializers.py:427
+#: build/api.py:490 company/models.py:889 company/serializers.py:427
 #: templates/email/build_order_required_stock.html:19
 #: templates/email/low_stock_notification.html:17
 msgid "Available"
 msgstr "可用數量"
 
-#: build/api.py:770 build/models.py:93
+#: build/api.py:800 build/models.py:92
 #: report/templates/report/inventree_build_order_report.html:105
 #: stock/serializers.py:87 templates/email/build_order_completed.html:16
 #: templates/email/overdue_build_order.html:15
 msgid "Build Order"
 msgstr "生產工單"
 
-#: build/models.py:94 users/models.py:205
+#: build/models.py:93 users/models.py:205
 msgid "Build Orders"
 msgstr "生產工單"
 
-#: build/models.py:139
+#: build/models.py:138
 msgid "Assembly BOM has not been validated"
 msgstr "裝配物料清單尚未驗證"
 
-#: build/models.py:146
+#: build/models.py:145
 msgid "Build order cannot be created for an inactive part"
 msgstr "無法為未激活的零件創建生產訂單"
 
-#: build/models.py:153
+#: build/models.py:152
 msgid "Build order cannot be created for an unlocked part"
 msgstr "無法為已解鎖的零件創建生產訂單"
 
-#: build/models.py:165
+#: build/models.py:164
 msgid "Invalid choice for parent build"
 msgstr "無效的上層生產工單選擇"
 
-#: build/models.py:174 order/models.py:277
+#: build/models.py:173 order/models.py:276
 msgid "Responsible user or group must be specified"
 msgstr "必須指定負責的用户或組"
 
-#: build/models.py:179
+#: build/models.py:178
 msgid "Build order part cannot be changed"
 msgstr "無法更改生產工單"
 
-#: build/models.py:184 order/models.py:290
+#: build/models.py:183 order/models.py:289
 msgid "Target date must be after start date"
 msgstr ""
 
-#: build/models.py:250
+#: build/models.py:211
 msgid "Build Order Reference"
 msgstr "生產工單代號"
 
-#: build/models.py:251 build/serializers.py:1389 order/models.py:537
-#: order/models.py:1109 order/models.py:1534 order/models.py:2330
+#: build/models.py:212 build/serializers.py:1389 order/models.py:499
+#: order/models.py:1020 order/models.py:1445 order/models.py:2241
 #: part/models.py:4291
 #: report/templates/report/inventree_bill_of_materials_report.html:139
 #: report/templates/report/inventree_purchase_order_report.html:28
@@ -704,205 +727,205 @@ msgstr "生產工單代號"
 msgid "Reference"
 msgstr "參考代號"
 
-#: build/models.py:260
+#: build/models.py:221
 msgid "Brief description of the build (optional)"
 msgstr "關於生產工單的簡單説明(選填)"
 
-#: build/models.py:270
+#: build/models.py:231
 msgid "BuildOrder to which this build is allocated"
 msgstr "這張生產工單對應的上層生產工單"
 
-#: build/models.py:279
+#: build/models.py:240
 msgid "Select part to build"
 msgstr "選擇要生產的零件"
 
-#: build/models.py:284
+#: build/models.py:245
 msgid "Sales Order Reference"
 msgstr "銷售訂單代號"
 
-#: build/models.py:289
+#: build/models.py:250
 msgid "SalesOrder to which this build is allocated"
 msgstr "這張生產工單對應的銷售訂單"
 
-#: build/models.py:294 build/serializers.py:1104
+#: build/models.py:255 build/serializers.py:1104
 msgid "Source Location"
 msgstr "來源倉儲地點"
 
-#: build/models.py:300
+#: build/models.py:261
 msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr "選擇領取料件的倉儲地點(留白表示可以從任何地點領取)"
 
-#: build/models.py:306
+#: build/models.py:267
 msgid "Destination Location"
 msgstr "目標倉儲地點"
 
-#: build/models.py:311
+#: build/models.py:272
 msgid "Select location where the completed items will be stored"
 msgstr "選擇已完成項目庫存地點"
 
-#: build/models.py:315
+#: build/models.py:276
 msgid "Build Quantity"
 msgstr "生產數量"
 
-#: build/models.py:318
+#: build/models.py:279
 msgid "Number of stock items to build"
 msgstr "要生產的項目數量"
 
-#: build/models.py:322
+#: build/models.py:283
 msgid "Completed items"
 msgstr "已完成項目"
 
-#: build/models.py:324
+#: build/models.py:285
 msgid "Number of stock items which have been completed"
 msgstr "已經完成的庫存品數量"
 
-#: build/models.py:328
+#: build/models.py:289
 msgid "Build Status"
 msgstr "生產狀態"
 
-#: build/models.py:333
+#: build/models.py:294
 msgid "Build status code"
 msgstr "生產狀態代碼"
 
-#: build/models.py:342 build/serializers.py:372 order/serializers.py:775
+#: build/models.py:303 build/serializers.py:372 order/serializers.py:775
 #: stock/models.py:945 stock/serializers.py:79 stock/serializers.py:1619
 msgid "Batch Code"
 msgstr "批號"
 
-#: build/models.py:346 build/serializers.py:373
+#: build/models.py:307 build/serializers.py:373
 msgid "Batch code for this build output"
 msgstr "此產出的批號"
 
-#: build/models.py:350 order/models.py:380 order/serializers.py:164
+#: build/models.py:311 order/models.py:379 order/serializers.py:164
 #: part/models.py:1245
 msgid "Creation Date"
 msgstr "建立日期"
 
-#: build/models.py:356
+#: build/models.py:317
 msgid "Build start date"
 msgstr ""
 
-#: build/models.py:357
+#: build/models.py:318
 msgid "Scheduled start date for this build order"
 msgstr ""
 
-#: build/models.py:363
+#: build/models.py:324
 msgid "Target completion date"
 msgstr "目標完成日期"
 
-#: build/models.py:365
+#: build/models.py:326
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "生產的預計完成日期。若超過此日期則工單會逾期。"
 
-#: build/models.py:370 order/models.py:597 order/models.py:2376
+#: build/models.py:331 order/models.py:552 order/models.py:2280
 msgid "Completion Date"
 msgstr "完成日期"
 
-#: build/models.py:378
+#: build/models.py:339
 msgid "completed by"
 msgstr "完成者"
 
-#: build/models.py:387
+#: build/models.py:348
 msgid "Issued by"
 msgstr "發布者"
 
-#: build/models.py:388
+#: build/models.py:349
 msgid "User who issued this build order"
 msgstr "發布此生產工單的使用者"
 
-#: build/models.py:397 common/models.py:117 order/api.py:169
-#: order/models.py:398 part/models.py:1262
+#: build/models.py:358 common/models.py:118 order/api.py:169
+#: order/models.py:404 part/models.py:1262
 #: report/templates/report/inventree_build_order_report.html:158
 msgid "Responsible"
 msgstr "負責人"
 
-#: build/models.py:398
+#: build/models.py:359
 msgid "User or group responsible for this build order"
 msgstr "負責此生產工單的使用者或羣組"
 
-#: build/models.py:403 stock/models.py:938
+#: build/models.py:364 stock/models.py:938
 msgid "External Link"
 msgstr "外部連結"
 
-#: build/models.py:405 common/models.py:1878 part/models.py:1073
+#: build/models.py:366 common/models.py:1879 part/models.py:1073
 #: stock/models.py:940
 msgid "Link to external URL"
 msgstr "外部URL連結"
 
-#: build/models.py:410
+#: build/models.py:371
 msgid "Build Priority"
 msgstr "製造優先度"
 
-#: build/models.py:413
+#: build/models.py:374
 msgid "Priority of this build order"
 msgstr "此生產工單的優先程度"
 
-#: build/models.py:421 common/models.py:87 common/models.py:101
-#: order/api.py:155 order/models.py:352
+#: build/models.py:382 common/models.py:88 common/models.py:102
+#: order/api.py:155 order/models.py:351
 msgid "Project Code"
 msgstr "專案代碼"
 
-#: build/models.py:422
+#: build/models.py:383
 msgid "Project code for this build order"
 msgstr "此生產工單隸屬的專案代碼"
 
-#: build/models.py:690 build/models.py:810
+#: build/models.py:651 build/models.py:771
 msgid "Failed to offload task to complete build allocations"
 msgstr "未能卸載任務以完成生產分配"
 
-#: build/models.py:710
+#: build/models.py:671
 #, python-brace-format
 msgid "Build order {build} has been completed"
 msgstr "生產工單 {build} 已經完成"
 
-#: build/models.py:716
+#: build/models.py:677
 msgid "A build order has been completed"
 msgstr "一張生產工單已經完成"
 
-#: build/models.py:887 build/serializers.py:420
+#: build/models.py:848 build/serializers.py:420
 msgid "Serial numbers must be provided for trackable parts"
 msgstr "對於可跟蹤的零件,必須提供序列號"
 
-#: build/models.py:997 build/models.py:1082
+#: build/models.py:958 build/models.py:1043
 msgid "No build output specified"
 msgstr "未指定產出"
 
-#: build/models.py:1000
+#: build/models.py:961
 msgid "Build output is already completed"
 msgstr "產出已完成"
 
-#: build/models.py:1003
+#: build/models.py:964
 msgid "Build output does not match Build Order"
 msgstr "產出與生產訂單不匹配"
 
-#: build/models.py:1085 build/serializers.py:299 build/serializers.py:348
-#: build/serializers.py:972 order/models.py:647 order/serializers.py:599
-#: order/serializers.py:770 part/serializers.py:1661 stock/models.py:785
+#: build/models.py:1046 build/serializers.py:299 build/serializers.py:348
+#: build/serializers.py:972 order/models.py:602 order/serializers.py:599
+#: order/serializers.py:770 part/serializers.py:1612 stock/models.py:785
 #: stock/models.py:1651 stock/serializers.py:718
 msgid "Quantity must be greater than zero"
 msgstr "數量必須大於零"
 
-#: build/models.py:1089 build/serializers.py:303
+#: build/models.py:1050 build/serializers.py:303
 msgid "Quantity cannot be greater than the output quantity"
 msgstr "數量不能大於輸出數量"
 
-#: build/models.py:1154 build/serializers.py:615
+#: build/models.py:1115 build/serializers.py:615
 #, python-brace-format
 msgid "Build output {serial} has not passed all required tests"
 msgstr "產出 {serial} 未通過所有必要測試"
 
-#: build/models.py:1515
+#: build/models.py:1476
 msgid "Build Order Line Item"
 msgstr "生產訂單行項目"
 
-#: build/models.py:1539
+#: build/models.py:1500
 msgid "Build object"
 msgstr "生產對象"
 
-#: build/models.py:1551 build/models.py:1810 build/serializers.py:287
-#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1240
-#: order/models.py:1517 order/models.py:2230 order/serializers.py:1662
-#: order/serializers.py:2129 part/models.py:3296 part/models.py:4264
+#: build/models.py:1512 build/models.py:1771 build/serializers.py:287
+#: build/serializers.py:333 build/serializers.py:1410 common/models.py:1241
+#: order/models.py:1428 order/models.py:2141 order/serializers.py:1662
+#: order/serializers.py:2128 part/models.py:3296 part/models.py:4264
 #: part/serializers.py:270
 #: report/templates/report/inventree_bill_of_materials_report.html:138
 #: report/templates/report/inventree_build_order_report.html:113
@@ -918,36 +941,36 @@ msgstr "生產對象"
 msgid "Quantity"
 msgstr "數量"
 
-#: build/models.py:1552
+#: build/models.py:1513
 msgid "Required quantity for build order"
 msgstr "生產工單所需數量"
 
-#: build/models.py:1636
+#: build/models.py:1597
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr "生產項必須指定產出,因為主零件已經被標記為可追蹤的"
 
-#: build/models.py:1647
+#: build/models.py:1608
 #, python-brace-format
 msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
 msgstr "分配的數量({q})不能超過可用的庫存數量({a})"
 
-#: build/models.py:1668 order/models.py:2179
+#: build/models.py:1629 order/models.py:2090
 msgid "Stock item is over-allocated"
 msgstr "庫存品項超額分配"
 
-#: build/models.py:1673 order/models.py:2182
+#: build/models.py:1634 order/models.py:2093
 msgid "Allocation quantity must be greater than zero"
 msgstr "分配的數量必須大於零"
 
-#: build/models.py:1679
+#: build/models.py:1640
 msgid "Quantity must be 1 for serialized stock"
 msgstr "有序號的品項數量必須為1"
 
-#: build/models.py:1739
+#: build/models.py:1700
 msgid "Selected stock item does not match BOM line"
 msgstr "選擇的庫存品項和BOM的項目不符"
 
-#: build/models.py:1800 build/serializers.py:955 build/serializers.py:1263
+#: build/models.py:1761 build/serializers.py:955 build/serializers.py:1263
 #: order/serializers.py:1499 order/serializers.py:1520
 #: report/templates/report/inventree_sales_order_shipment_report.html:29
 #: stock/models.py:384 stock/serializers.py:96 stock/serializers.py:816
@@ -955,19 +978,19 @@ msgstr "選擇的庫存品項和BOM的項目不符"
 msgid "Stock Item"
 msgstr "庫存品項"
 
-#: build/models.py:1801
+#: build/models.py:1762
 msgid "Source stock item"
 msgstr "來源庫存項目"
 
-#: build/models.py:1811
+#: build/models.py:1772
 msgid "Stock quantity to allocate to build"
 msgstr "要分配的庫存數量"
 
-#: build/models.py:1820
+#: build/models.py:1781
 msgid "Install into"
 msgstr "安裝到"
 
-#: build/models.py:1821
+#: build/models.py:1782
 msgid "Destination stock item"
 msgstr "目的庫存品項"
 
@@ -1034,10 +1057,10 @@ msgstr "輸出產出的序列號"
 
 #: build/serializers.py:385 build/serializers.py:510 build/serializers.py:580
 #: build/serializers.py:1267 build/serializers.py:1271 order/serializers.py:759
-#: order/serializers.py:910 order/serializers.py:2020 part/serializers.py:1296
+#: order/serializers.py:910 order/serializers.py:2019 part/serializers.py:1245
 #: stock/serializers.py:105 stock/serializers.py:638 stock/serializers.py:740
 #: stock/serializers.py:904 stock/serializers.py:1000 stock/serializers.py:1469
-#: stock/serializers.py:1759 users/models.py:990
+#: stock/serializers.py:1759 users/models.py:989
 msgid "Location"
 msgstr "地點"
 
@@ -1053,7 +1076,7 @@ msgstr "自動分配序號"
 msgid "Automatically allocate required items with matching serial numbers"
 msgstr "自動為需要項目分配對應的序號"
 
-#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1074
+#: build/serializers.py:436 order/serializers.py:888 stock/api.py:1076
 #: stock/models.py:1674
 msgid "The following serial numbers already exist or are invalid"
 msgstr "序號已存在或無效"
@@ -1082,10 +1105,10 @@ msgstr "廢品產出的原因"
 msgid "Location for completed build outputs"
 msgstr "已完成刪除的庫存地點"
 
-#: build/serializers.py:587 order/models.py:547 order/models.py:1134
-#: order/models.py:2355 order/serializers.py:801 order/serializers.py:1988
+#: build/serializers.py:587 order/models.py:509 order/models.py:1045
+#: order/models.py:2266 order/serializers.py:801 order/serializers.py:1987
 #: stock/serializers.py:603 stock/serializers.py:1007 stock/serializers.py:1064
-#: stock/serializers.py:1626 users/models.py:983
+#: stock/serializers.py:1626 users/models.py:982
 msgid "Status"
 msgstr "狀態"
 
@@ -1270,8 +1293,8 @@ msgstr "物料清單零件名稱"
 msgid "Build"
 msgstr ""
 
-#: build/serializers.py:1286 company/models.py:662 order/api.py:262
-#: order/api.py:480 order/serializers.py:591 stock/models.py:881
+#: build/serializers.py:1286 company/models.py:662 order/api.py:300
+#: order/api.py:501 order/serializers.py:591 stock/models.py:881
 #: stock/serializers.py:622
 msgid "Supplier Part"
 msgstr "供應商零件"
@@ -1301,7 +1324,7 @@ msgid "Allow Variants"
 msgstr "允許變體"
 
 #: build/serializers.py:1412 build/serializers.py:1416 part/models.py:4122
-#: part/models.py:4600 stock/api.py:828
+#: part/models.py:4600 stock/api.py:830
 msgid "BOM Item"
 msgstr "物料清單項"
 
@@ -1310,19 +1333,19 @@ msgid "Allocated Stock"
 msgstr "分配庫存"
 
 #: build/serializers.py:1442 company/serializers.py:424
-#: order/serializers.py:1263 part/serializers.py:981 part/serializers.py:1693
+#: order/serializers.py:1263 part/serializers.py:930 part/serializers.py:1644
 msgid "On Order"
 msgstr "已訂購"
 
-#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1695
+#: build/serializers.py:1444 order/serializers.py:1264 part/serializers.py:1646
 msgid "In Production"
 msgstr "生產中"
 
-#: build/serializers.py:1446 part/serializers.py:988
+#: build/serializers.py:1446 part/serializers.py:937
 msgid "External Stock"
 msgstr "外部庫存"
 
-#: build/serializers.py:1447 part/serializers.py:1720
+#: build/serializers.py:1447 part/serializers.py:1671
 msgid "Available Stock"
 msgstr "可用庫存"
 
@@ -1356,7 +1379,7 @@ msgstr "已取消"
 
 #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:521
 #: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:687
+#: order/status_codes.py:52 order/status_codes.py:83
 msgid "Complete"
 msgstr "完成"
 
@@ -1405,536 +1428,536 @@ msgstr "未提供有效的貨幣代碼"
 msgid "No plugin"
 msgstr "暫無插件"
 
-#: common/models.py:74
+#: common/models.py:75
 msgid "Updated"
 msgstr "已是最新"
 
-#: common/models.py:75
+#: common/models.py:76
 msgid "Timestamp of last update"
 msgstr "最後更新時間戳"
 
-#: common/models.py:102
+#: common/models.py:103
 msgid "Unique project code"
 msgstr "唯一項目編碼"
 
-#: common/models.py:109
+#: common/models.py:110
 msgid "Project description"
 msgstr "項目描述"
 
-#: common/models.py:118
+#: common/models.py:119
 msgid "User or group responsible for this project"
 msgstr "負責此項目的用户或羣組"
 
-#: common/models.py:706 common/models.py:1172 common/models.py:1210
+#: common/models.py:707 common/models.py:1173 common/models.py:1211
 msgid "Settings key"
 msgstr ""
 
-#: common/models.py:710
+#: common/models.py:711
 msgid "Settings value"
 msgstr "設定值"
 
-#: common/models.py:765
+#: common/models.py:766
 msgid "Chosen value is not a valid option"
 msgstr "所選值不是一個有效的選項"
 
-#: common/models.py:781
+#: common/models.py:782
 msgid "Value must be a boolean value"
 msgstr "該值必須是布爾值"
 
-#: common/models.py:789
+#: common/models.py:790
 msgid "Value must be an integer value"
 msgstr "該值必須為整數"
 
-#: common/models.py:797
+#: common/models.py:798
 msgid "Value must be a valid number"
 msgstr ""
 
-#: common/models.py:822
+#: common/models.py:823
 msgid "Value does not pass validation checks"
 msgstr ""
 
-#: common/models.py:844
+#: common/models.py:845
 msgid "Key string must be unique"
 msgstr "鍵字符串必須是唯一的"
 
-#: common/models.py:1218 common/models.py:1219 common/models.py:1323
-#: common/models.py:1324 common/models.py:1569 common/models.py:1570
-#: common/models.py:1894 common/models.py:1895 common/models.py:2276
+#: common/models.py:1219 common/models.py:1220 common/models.py:1324
+#: common/models.py:1325 common/models.py:1570 common/models.py:1571
+#: common/models.py:1895 common/models.py:1896 common/models.py:2277
 #: importer/models.py:89 part/models.py:3319 part/models.py:3406
 #: part/models.py:3480 part/models.py:3508 plugin/models.py:316
 #: plugin/models.py:317 report/templates/report/inventree_test_report.html:105
-#: users/models.py:109 users/models.py:942
+#: users/models.py:109 users/models.py:941
 msgid "User"
 msgstr "使用者"
 
-#: common/models.py:1241
+#: common/models.py:1242
 msgid "Price break quantity"
 msgstr "批發價數量"
 
-#: common/models.py:1248 company/serializers.py:567 order/models.py:1594
-#: order/models.py:2657
+#: common/models.py:1249 company/serializers.py:567 order/models.py:1505
+#: order/models.py:2561
 msgid "Price"
 msgstr "價格"
 
-#: common/models.py:1249
+#: common/models.py:1250
 msgid "Unit price at specified quantity"
 msgstr "指定數量的單位價格"
 
-#: common/models.py:1300 common/models.py:1485
+#: common/models.py:1301 common/models.py:1486
 msgid "Endpoint"
 msgstr "端點"
 
-#: common/models.py:1301
+#: common/models.py:1302
 msgid "Endpoint at which this webhook is received"
 msgstr "接收此網絡鈎子的端點"
 
-#: common/models.py:1311
+#: common/models.py:1312
 msgid "Name for this webhook"
 msgstr "此網絡鈎子的名稱"
 
-#: common/models.py:1315 common/models.py:2135 common/models.py:2242
+#: common/models.py:1316 common/models.py:2136 common/models.py:2243
 #: company/models.py:164 company/models.py:799 machine/models.py:39
-#: part/models.py:1205 plugin/models.py:67 stock/api.py:588 users/models.py:180
-#: users/models.py:995 users/serializers.py:247
+#: part/models.py:1205 plugin/models.py:67 stock/api.py:590 users/models.py:180
+#: users/models.py:994 users/serializers.py:270
 msgid "Active"
 msgstr "激活"
 
-#: common/models.py:1315
+#: common/models.py:1316
 msgid "Is this webhook active"
 msgstr "網絡鈎子是否已啓用"
 
-#: common/models.py:1331 users/models.py:157
+#: common/models.py:1332 users/models.py:157
 msgid "Token"
 msgstr "令牌"
 
-#: common/models.py:1332
+#: common/models.py:1333
 msgid "Token for access"
 msgstr "訪問令牌"
 
-#: common/models.py:1340
+#: common/models.py:1341
 msgid "Secret"
 msgstr "密鑰"
 
-#: common/models.py:1341
+#: common/models.py:1342
 msgid "Shared secret for HMAC"
 msgstr "HMAC共享密鑰"
 
-#: common/models.py:1449
+#: common/models.py:1450
 msgid "Message ID"
 msgstr "消息ID"
 
-#: common/models.py:1450
+#: common/models.py:1451
 msgid "Unique identifier for this message"
 msgstr "此郵件的唯一標識符"
 
-#: common/models.py:1458
+#: common/models.py:1459
 msgid "Host"
 msgstr "主機"
 
-#: common/models.py:1459
+#: common/models.py:1460
 msgid "Host from which this message was received"
 msgstr "接收此消息的主機"
 
-#: common/models.py:1467
+#: common/models.py:1468
 msgid "Header"
 msgstr "標題"
 
-#: common/models.py:1468
+#: common/models.py:1469
 msgid "Header of this message"
 msgstr "此消息的標題"
 
-#: common/models.py:1475
+#: common/models.py:1476
 msgid "Body"
 msgstr "正文"
 
-#: common/models.py:1476
+#: common/models.py:1477
 msgid "Body of this message"
 msgstr "此消息的正文"
 
-#: common/models.py:1486
+#: common/models.py:1487
 msgid "Endpoint on which this message was received"
 msgstr "接收此消息的終點"
 
-#: common/models.py:1491
+#: common/models.py:1492
 msgid "Worked on"
 msgstr "工作於"
 
-#: common/models.py:1492
+#: common/models.py:1493
 msgid "Was the work on this message finished?"
 msgstr "這條消息的工作完成了嗎?"
 
-#: common/models.py:1618
+#: common/models.py:1619
 msgid "Id"
 msgstr "標識"
 
-#: common/models.py:1620 part/serializers.py:276
+#: common/models.py:1621 part/serializers.py:276
 msgid "Title"
 msgstr "標題"
 
-#: common/models.py:1622 common/models.py:1877 company/models.py:149
+#: common/models.py:1623 common/models.py:1878 company/models.py:149
 #: company/models.py:445 company/models.py:512 company/models.py:816
-#: order/models.py:358 order/models.py:1547 order/models.py:1998
+#: order/models.py:357 order/models.py:1458 order/models.py:1909
 #: part/models.py:1072
 #: report/templates/report/inventree_build_order_report.html:164
 msgid "Link"
 msgstr "連結"
 
-#: common/models.py:1624
+#: common/models.py:1625
 msgid "Published"
 msgstr "已發佈"
 
-#: common/models.py:1626
+#: common/models.py:1627
 msgid "Author"
 msgstr "作者"
 
-#: common/models.py:1628
+#: common/models.py:1629
 msgid "Summary"
 msgstr "摘要"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Read"
 msgstr "閲讀"
 
-#: common/models.py:1631
+#: common/models.py:1632
 msgid "Was this news item read?"
 msgstr "這條新聞被閲讀了嗎?"
 
-#: common/models.py:1648 company/models.py:160 part/models.py:1083
+#: common/models.py:1649 company/models.py:160 part/models.py:1083
 #: report/templates/report/inventree_bill_of_materials_report.html:126
 #: report/templates/report/inventree_bill_of_materials_report.html:148
 #: report/templates/report/inventree_return_order_report.html:35
 msgid "Image"
 msgstr "圖像"
 
-#: common/models.py:1648
+#: common/models.py:1649
 msgid "Image file"
 msgstr "圖像文件"
 
-#: common/models.py:1660 common/models.py:1861
+#: common/models.py:1661 common/models.py:1862
 msgid "Target model type for this image"
 msgstr "此圖像的目標模型類型"
 
-#: common/models.py:1664
+#: common/models.py:1665
 msgid "Target model ID for this image"
 msgstr "此圖像的目標型號ID"
 
-#: common/models.py:1686
+#: common/models.py:1687
 msgid "Custom Unit"
 msgstr "自定義單位"
 
-#: common/models.py:1704
+#: common/models.py:1705
 msgid "Unit symbol must be unique"
 msgstr "單位符號必須唯一"
 
-#: common/models.py:1719
+#: common/models.py:1720
 msgid "Unit name must be a valid identifier"
 msgstr "單位名稱必須是有效的標識符"
 
-#: common/models.py:1738
+#: common/models.py:1739
 msgid "Unit name"
 msgstr "單位名稱"
 
-#: common/models.py:1745
+#: common/models.py:1746
 msgid "Symbol"
 msgstr "符號"
 
-#: common/models.py:1746
+#: common/models.py:1747
 msgid "Optional unit symbol"
 msgstr "可選單位符號"
 
-#: common/models.py:1752
+#: common/models.py:1753
 msgid "Definition"
 msgstr "定義"
 
-#: common/models.py:1753
+#: common/models.py:1754
 msgid "Unit definition"
 msgstr "單位定義"
 
-#: common/models.py:1811 common/models.py:1868 stock/models.py:2748
+#: common/models.py:1812 common/models.py:1869 stock/models.py:2748
 #: stock/serializers.py:249
 msgid "Attachment"
 msgstr "附件"
 
-#: common/models.py:1823
+#: common/models.py:1824
 msgid "Missing file"
 msgstr "缺少檔案"
 
-#: common/models.py:1824
+#: common/models.py:1825
 msgid "Missing external link"
 msgstr "缺少外部連結"
 
-#: common/models.py:1869
+#: common/models.py:1870
 msgid "Select file to attach"
 msgstr "選擇附件"
 
-#: common/models.py:1885
+#: common/models.py:1886
 msgid "Comment"
 msgstr "註解"
 
-#: common/models.py:1886
+#: common/models.py:1887
 msgid "Attachment comment"
 msgstr "附件評論"
 
-#: common/models.py:1902
+#: common/models.py:1903
 msgid "Upload date"
 msgstr "上傳日期"
 
-#: common/models.py:1903
+#: common/models.py:1904
 msgid "Date the file was uploaded"
 msgstr "上傳文件的日期"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size"
 msgstr "文件大小"
 
-#: common/models.py:1907
+#: common/models.py:1908
 msgid "File size in bytes"
 msgstr "文件大小,以字節為單位"
 
-#: common/models.py:1945 common/serializers.py:634
+#: common/models.py:1946 common/serializers.py:634
 msgid "Invalid model type specified for attachment"
 msgstr "為附件指定的模型類型無效"
 
-#: common/models.py:1966
+#: common/models.py:1967
 msgid "Custom State"
 msgstr "自定狀態"
 
-#: common/models.py:1967
+#: common/models.py:1968
 msgid "Custom States"
 msgstr "定製狀態"
 
-#: common/models.py:1972
+#: common/models.py:1973
 msgid "Reference Status Set"
 msgstr "參考狀態設定"
 
-#: common/models.py:1973
+#: common/models.py:1974
 msgid "Status set that is extended with this custom state"
 msgstr "使用此自定義狀態擴展狀態的狀態集"
 
-#: common/models.py:1977 generic/states/serializers.py:18
+#: common/models.py:1978 generic/states/serializers.py:18
 msgid "Logical Key"
 msgstr "邏輯密鑰"
 
-#: common/models.py:1979
+#: common/models.py:1980
 msgid "State logical key that is equal to this custom state in business logic"
 msgstr "等同於商業邏輯中自定義狀態的狀態邏輯鍵"
 
-#: common/models.py:1984 common/models.py:2223 company/models.py:600
+#: common/models.py:1985 common/models.py:2224 company/models.py:600
 #: report/templates/report/inventree_test_report.html:104 stock/models.py:2740
 msgid "Value"
 msgstr "值"
 
-#: common/models.py:1985
+#: common/models.py:1986
 msgid "Numerical value that will be saved in the models database"
 msgstr ""
 
-#: common/models.py:1991
+#: common/models.py:1992
 msgid "Name of the state"
 msgstr "狀態名"
 
-#: common/models.py:2000 common/models.py:2229 generic/states/serializers.py:22
+#: common/models.py:2001 common/models.py:2230 generic/states/serializers.py:22
 #: part/serializers.py:278
 msgid "Label"
 msgstr "標籤"
 
-#: common/models.py:2001
+#: common/models.py:2002
 msgid "Label that will be displayed in the frontend"
 msgstr "在前端顯示的標籤"
 
-#: common/models.py:2008 generic/states/serializers.py:24
+#: common/models.py:2009 generic/states/serializers.py:24
 msgid "Color"
 msgstr "顏色"
 
-#: common/models.py:2009
+#: common/models.py:2010
 msgid "Color that will be displayed in the frontend"
 msgstr "將在前端顯示顏色"
 
-#: common/models.py:2017 part/serializers.py:280
+#: common/models.py:2018 part/serializers.py:280
 msgid "Model"
 msgstr "模式"
 
-#: common/models.py:2018
+#: common/models.py:2019
 msgid "Model this state is associated with"
 msgstr "該狀態關聯的模型"
 
-#: common/models.py:2033
+#: common/models.py:2034
 msgid "Model must be selected"
 msgstr "必須選定模型"
 
-#: common/models.py:2036
+#: common/models.py:2037
 msgid "Key must be selected"
 msgstr "必須選取密鑰"
 
-#: common/models.py:2039
+#: common/models.py:2040
 msgid "Logical key must be selected"
 msgstr "必須選中邏輯密鑰"
 
-#: common/models.py:2043
+#: common/models.py:2044
 msgid "Key must be different from logical key"
 msgstr "密鑰必須不同於邏輯密鑰"
 
-#: common/models.py:2050
+#: common/models.py:2051
 msgid "Valid reference status class must be provided"
 msgstr ""
 
-#: common/models.py:2056
+#: common/models.py:2057
 msgid "Key must be different from the logical keys of the reference status"
 msgstr "密鑰必須不同於參考狀態的邏輯密鑰"
 
-#: common/models.py:2063
+#: common/models.py:2064
 msgid "Logical key must be in the logical keys of the reference status"
 msgstr "邏輯密鑰必須在參考狀態的邏輯鍵中"
 
-#: common/models.py:2070
+#: common/models.py:2071
 msgid "Name must be different from the names of the reference status"
 msgstr ""
 
-#: common/models.py:2110 common/models.py:2217 part/models.py:3819
+#: common/models.py:2111 common/models.py:2218 part/models.py:3819
 msgid "Selection List"
 msgstr ""
 
-#: common/models.py:2111
+#: common/models.py:2112
 msgid "Selection Lists"
 msgstr ""
 
-#: common/models.py:2116
+#: common/models.py:2117
 msgid "Name of the selection list"
 msgstr ""
 
-#: common/models.py:2123
+#: common/models.py:2124
 msgid "Description of the selection list"
 msgstr ""
 
-#: common/models.py:2129 part/models.py:1210
+#: common/models.py:2130 part/models.py:1210
 msgid "Locked"
 msgstr "已鎖定"
 
-#: common/models.py:2130
+#: common/models.py:2131
 msgid "Is this selection list locked?"
 msgstr ""
 
-#: common/models.py:2136
+#: common/models.py:2137
 msgid "Can this selection list be used?"
 msgstr ""
 
-#: common/models.py:2144
+#: common/models.py:2145
 msgid "Source Plugin"
 msgstr ""
 
-#: common/models.py:2145
+#: common/models.py:2146
 msgid "Plugin which provides the selection list"
 msgstr ""
 
-#: common/models.py:2150
+#: common/models.py:2151
 msgid "Source String"
 msgstr ""
 
-#: common/models.py:2151
+#: common/models.py:2152
 msgid "Optional string identifying the source used for this list"
 msgstr ""
 
-#: common/models.py:2160
+#: common/models.py:2161
 msgid "Default Entry"
 msgstr ""
 
-#: common/models.py:2161
+#: common/models.py:2162
 msgid "Default entry for this selection list"
 msgstr ""
 
-#: common/models.py:2166
+#: common/models.py:2167
 msgid "Created"
 msgstr "已創建"
 
-#: common/models.py:2167
+#: common/models.py:2168
 msgid "Date and time that the selection list was created"
 msgstr ""
 
-#: common/models.py:2172
+#: common/models.py:2173
 msgid "Last Updated"
 msgstr "最近更新"
 
-#: common/models.py:2173
+#: common/models.py:2174
 msgid "Date and time that the selection list was last updated"
 msgstr ""
 
-#: common/models.py:2207
+#: common/models.py:2208
 msgid "Selection List Entry"
 msgstr ""
 
-#: common/models.py:2208
+#: common/models.py:2209
 msgid "Selection List Entries"
 msgstr ""
 
-#: common/models.py:2218
+#: common/models.py:2219
 msgid "Selection list to which this entry belongs"
 msgstr ""
 
-#: common/models.py:2224
+#: common/models.py:2225
 msgid "Value of the selection list entry"
 msgstr ""
 
-#: common/models.py:2230
+#: common/models.py:2231
 msgid "Label for the selection list entry"
 msgstr ""
 
-#: common/models.py:2236
+#: common/models.py:2237
 msgid "Description of the selection list entry"
 msgstr ""
 
-#: common/models.py:2243
+#: common/models.py:2244
 msgid "Is this selection list entry active?"
 msgstr ""
 
-#: common/models.py:2261
+#: common/models.py:2262
 msgid "Barcode Scan"
 msgstr "掃描條碼"
 
-#: common/models.py:2265 importer/models.py:515 part/models.py:3984
+#: common/models.py:2266 importer/models.py:515 part/models.py:3984
 msgid "Data"
 msgstr "數據"
 
-#: common/models.py:2266
+#: common/models.py:2267
 msgid "Barcode data"
 msgstr "條碼數據"
 
-#: common/models.py:2277
+#: common/models.py:2278
 msgid "User who scanned the barcode"
 msgstr "掃描條碼"
 
-#: common/models.py:2282 importer/models.py:60
+#: common/models.py:2283 importer/models.py:60
 msgid "Timestamp"
 msgstr "時間戳"
 
-#: common/models.py:2283
+#: common/models.py:2284
 msgid "Date and time of the barcode scan"
 msgstr "掃描條碼的日期和時間"
 
-#: common/models.py:2289
+#: common/models.py:2290
 msgid "URL endpoint which processed the barcode"
 msgstr "處理條碼的 URL 終點"
 
-#: common/models.py:2296 order/models.py:1584 plugin/serializers.py:89
+#: common/models.py:2297 order/models.py:1495 plugin/serializers.py:89
 msgid "Context"
 msgstr "上下文"
 
-#: common/models.py:2297
+#: common/models.py:2298
 msgid "Context data for the barcode scan"
 msgstr "掃描條碼的上下文數據"
 
-#: common/models.py:2304
+#: common/models.py:2305
 msgid "Response"
 msgstr "響應"
 
-#: common/models.py:2305
+#: common/models.py:2306
 msgid "Response data from the barcode scan"
 msgstr "掃描條碼的響應數據"
 
-#: common/models.py:2311 report/templates/report/inventree_test_report.html:103
+#: common/models.py:2312 report/templates/report/inventree_test_report.html:103
 #: stock/models.py:2734
 msgid "Result"
 msgstr "結果"
 
-#: common/models.py:2312
+#: common/models.py:2313
 msgid "Was the barcode scan successful?"
 msgstr "條碼掃描成功嗎?"
 
@@ -1956,7 +1979,7 @@ msgstr "{verbose_name} 已取消"
 msgid "A order that is assigned to you was canceled"
 msgstr "分配給您的訂單已取消"
 
-#: common/notifications.py:346 common/notifications.py:353 order/api.py:528
+#: common/notifications.py:346 common/notifications.py:353 order/api.py:549
 msgid "Items Received"
 msgstr "收到的物品"
 
@@ -2036,7 +2059,7 @@ msgstr "任務關鍵詞參數"
 msgid "Filename"
 msgstr "檔案名稱"
 
-#: common/serializers.py:609 report/api.py:43 report/serializers.py:54
+#: common/serializers.py:609 report/api.py:45 report/serializers.py:53
 msgid "Model Type"
 msgstr "模型類型"
 
@@ -2384,8 +2407,8 @@ msgstr "複製類別參數模板"
 msgid "Copy category parameter templates when creating a part"
 msgstr "創建零件時複製類別參數模板"
 
-#: common/setting/system.py:423 part/models.py:3978 report/models.py:324
-#: report/models.py:529 report/serializers.py:91 report/serializers.py:132
+#: common/setting/system.py:423 part/models.py:3978 report/models.py:298
+#: report/models.py:502 report/serializers.py:90 report/serializers.py:131
 #: stock/serializers.py:238
 msgid "Template"
 msgstr "模板"
@@ -2398,8 +2421,8 @@ msgstr "零件默認為模板"
 msgid "Parts can be assembled from other components by default"
 msgstr "默認情況下,元件可由其他零件組裝而成"
 
-#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1681
-#: part/serializers.py:1687
+#: common/setting/system.py:435 part/models.py:1176 part/serializers.py:1632
+#: part/serializers.py:1638
 msgid "Component"
 msgstr "組件"
 
@@ -2415,7 +2438,7 @@ msgstr "可購買"
 msgid "Parts are purchaseable by default"
 msgstr "默認情況下可購買零件"
 
-#: common/setting/system.py:447 part/models.py:1200 stock/api.py:589
+#: common/setting/system.py:447 part/models.py:1200 stock/api.py:591
 msgid "Salable"
 msgstr "可銷售"
 
@@ -2619,8 +2642,8 @@ msgstr "日誌錯誤報告"
 msgid "Log errors which occur when generating reports"
 msgstr "記錄生成報告時出現的錯誤"
 
-#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:28
-#: report/models.py:332
+#: common/setting/system.py:638 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:306
 msgid "Page Size"
 msgstr "頁面大小"
 
@@ -3452,12 +3475,12 @@ msgid "Supplier is Active"
 msgstr "供應商已激活"
 
 #: company/api.py:299 company/models.py:498 company/serializers.py:444
-#: part/serializers.py:620
+#: part/serializers.py:569
 msgid "Manufacturer"
 msgstr "製造商"
 
 #: company/api.py:306 company/models.py:97 company/models.py:370
-#: stock/api.py:846
+#: stock/api.py:848
 msgid "Company"
 msgstr "公司"
 
@@ -3497,8 +3520,8 @@ msgstr "聯繫電話"
 msgid "Contact email address"
 msgstr "聯繫人電子郵箱地址"
 
-#: company/models.py:142 company/models.py:274 order/models.py:407
-#: users/models.py:1002
+#: company/models.py:142 company/models.py:274 order/models.py:413
+#: users/models.py:1001
 msgid "Contact"
 msgstr "聯繫人"
 
@@ -3542,7 +3565,7 @@ msgstr "這家公司生產零件嗎?"
 msgid "Default currency used for this company"
 msgstr "此公司使用的默認貨幣"
 
-#: company/models.py:313 order/models.py:417
+#: company/models.py:313 order/models.py:423
 msgid "Address"
 msgstr "地址"
 
@@ -3653,7 +3676,7 @@ msgid "Select manufacturer"
 msgstr "選擇製造商"
 
 #: company/models.py:505 company/serializers.py:466 order/serializers.py:658
-#: part/serializers.py:630
+#: part/serializers.py:579
 msgid "MPN"
 msgstr "製造商零件編號"
 
@@ -3702,10 +3725,10 @@ msgid "Linked manufacturer part must reference the same base part"
 msgstr "鏈接的製造商零件必須引用相同的基礎零件"
 
 #: company/models.py:787 company/serializers.py:436 company/serializers.py:454
-#: order/models.py:562 part/serializers.py:604
+#: order/models.py:524 part/serializers.py:553
 #: plugin/builtin/suppliers/digikey.py:25 plugin/builtin/suppliers/lcsc.py:26
 #: plugin/builtin/suppliers/mouser.py:24 plugin/builtin/suppliers/tme.py:26
-#: stock/api.py:513 templates/email/overdue_purchase_order.html:16
+#: stock/api.py:515 templates/email/overdue_purchase_order.html:16
 msgid "Supplier"
 msgstr "供應商"
 
@@ -3713,7 +3736,7 @@ msgstr "供應商"
 msgid "Select supplier"
 msgstr "選擇供應商"
 
-#: company/models.py:794 part/serializers.py:615
+#: company/models.py:794 part/serializers.py:564
 msgid "Supplier stock keeping unit"
 msgstr "供應商庫存管理單位"
 
@@ -3733,7 +3756,7 @@ msgstr "外部供應商零件鏈接的URL"
 msgid "Supplier part description"
 msgstr "供應商零件説明"
 
-#: company/models.py:833 order/serializers.py:813 order/serializers.py:2025
+#: company/models.py:833 order/serializers.py:813 order/serializers.py:2024
 #: part/models.py:4299 part/models.py:4640
 #: report/templates/report/inventree_bill_of_materials_report.html:140
 #: report/templates/report/inventree_purchase_order_report.html:32
@@ -3805,10 +3828,34 @@ msgstr "此供應商使用的默認貨幣"
 msgid "Company Name"
 msgstr "公司名稱"
 
-#: company/serializers.py:420 part/serializers.py:980 stock/serializers.py:489
+#: company/serializers.py:420 part/serializers.py:929 stock/serializers.py:489
 msgid "In Stock"
 msgstr "有庫存"
 
+#: data_exporter/mixins.py:319 data_exporter/mixins.py:388
+msgid "Error occurred during data export"
+msgstr ""
+
+#: data_exporter/mixins.py:370
+msgid "Data export plugin returned incorrect data format"
+msgstr ""
+
+#: data_exporter/serializers.py:59
+msgid "Export Format"
+msgstr ""
+
+#: data_exporter/serializers.py:60
+msgid "Select export file format"
+msgstr ""
+
+#: data_exporter/serializers.py:67
+msgid "Export Plugin"
+msgstr ""
+
+#: data_exporter/serializers.py:68
+msgid "Select export plugin"
+msgstr ""
+
 #: generic/states/fields.py:143
 msgid "Custom status key"
 msgstr "自定義狀態密鑰"
@@ -3841,10 +3888,6 @@ msgstr "放置"
 msgid "Invalid status code"
 msgstr ""
 
-#: importer/mixins.py:326
-msgid "Invalid export format"
-msgstr "導出格式無效"
-
 #: importer/models.py:64
 msgid "Data File"
 msgstr "數據文件"
@@ -3925,7 +3968,7 @@ msgstr "原始行數據"
 msgid "Errors"
 msgstr "錯誤"
 
-#: importer/models.py:519 part/api.py:859
+#: importer/models.py:519 part/api.py:857
 msgid "Valid"
 msgstr "有效"
 
@@ -4013,51 +4056,51 @@ msgstr "數據文件包含的行太多"
 msgid "Value must be a valid dictionary object"
 msgstr "值必須是有效的字典對象"
 
-#: machine/machine_types/label_printer.py:216
+#: machine/machine_types/label_printer.py:212
 msgid "Copies"
 msgstr "拷貝"
 
-#: machine/machine_types/label_printer.py:217
+#: machine/machine_types/label_printer.py:213
 msgid "Number of copies to print for each label"
 msgstr "每個標籤要打印的份數"
 
-#: machine/machine_types/label_printer.py:232
+#: machine/machine_types/label_printer.py:228
 msgid "Connected"
 msgstr "已連接"
 
-#: machine/machine_types/label_printer.py:233 order/api.py:1660
+#: machine/machine_types/label_printer.py:229 order/api.py:1666
 msgid "Unknown"
 msgstr "未知"
 
-#: machine/machine_types/label_printer.py:234
+#: machine/machine_types/label_printer.py:230
 msgid "Printing"
 msgstr "正在打印"
 
-#: machine/machine_types/label_printer.py:235
+#: machine/machine_types/label_printer.py:231
 msgid "No media"
 msgstr "無媒體"
 
-#: machine/machine_types/label_printer.py:236
+#: machine/machine_types/label_printer.py:232
 msgid "Paper jam"
 msgstr "卡紙"
 
-#: machine/machine_types/label_printer.py:237
+#: machine/machine_types/label_printer.py:233
 msgid "Disconnected"
 msgstr "已斷開連接"
 
-#: machine/machine_types/label_printer.py:244
+#: machine/machine_types/label_printer.py:240
 msgid "Label Printer"
 msgstr "標籤打印機"
 
-#: machine/machine_types/label_printer.py:245
+#: machine/machine_types/label_printer.py:241
 msgid "Directly print labels for various items."
 msgstr "直接打印各種物品的標籤。"
 
-#: machine/machine_types/label_printer.py:251
+#: machine/machine_types/label_printer.py:247
 msgid "Printer Location"
 msgstr "打印機位置"
 
-#: machine/machine_types/label_printer.py:252
+#: machine/machine_types/label_printer.py:248
 msgid "Scope the printer to a specific location"
 msgstr "將打印機定位到特定位置"
 
@@ -4117,7 +4160,7 @@ msgstr "配置類型"
 msgid "Order Reference"
 msgstr "訂單參考"
 
-#: order/api.py:143 order/api.py:1121
+#: order/api.py:143 order/api.py:1127
 msgid "Outstanding"
 msgstr "未完成"
 
@@ -4125,7 +4168,7 @@ msgstr "未完成"
 msgid "Has Project Code"
 msgstr "有項目編碼"
 
-#: order/api.py:173 order/models.py:389
+#: order/api.py:173 order/models.py:388
 msgid "Created By"
 msgstr "創建人"
 
@@ -4161,53 +4204,53 @@ msgstr ""
 msgid "Target Date After"
 msgstr ""
 
-#: order/api.py:226
+#: order/api.py:264
 msgid "Has Pricing"
 msgstr "有定價"
 
-#: order/api.py:275 order/api.py:742 order/api.py:1356
+#: order/api.py:313 order/api.py:763 order/api.py:1362
 msgid "Completed Before"
 msgstr ""
 
-#: order/api.py:279 order/api.py:746 order/api.py:1360
+#: order/api.py:317 order/api.py:767 order/api.py:1366
 msgid "Completed After"
 msgstr ""
 
-#: order/api.py:463 order/api.py:859 order/api.py:1085 order/models.py:1647
-#: order/models.py:1765 order/models.py:1816 order/models.py:1944
-#: order/models.py:2110 order/models.py:2613 order/models.py:2679
+#: order/api.py:484 order/api.py:865 order/api.py:1091 order/models.py:1558
+#: order/models.py:1676 order/models.py:1727 order/models.py:1855
+#: order/models.py:2021 order/models.py:2517 order/models.py:2583
 msgid "Order"
 msgstr "訂單"
 
-#: order/api.py:467 order/api.py:897
+#: order/api.py:488 order/api.py:903
 msgid "Order Complete"
 msgstr "訂單完成"
 
-#: order/api.py:499 order/serializers.py:666
+#: order/api.py:520 order/serializers.py:666
 msgid "Internal Part"
 msgstr "內部零件"
 
-#: order/api.py:518
+#: order/api.py:539
 msgid "Order Pending"
 msgstr "訂單待定"
 
-#: order/api.py:882
+#: order/api.py:888
 msgid "Completed"
 msgstr "已完成"
 
-#: order/api.py:1137
+#: order/api.py:1143
 msgid "Has Shipment"
 msgstr ""
 
-#: order/api.py:1654 order/models.py:446 order/models.py:1648
-#: order/models.py:1766
+#: order/api.py:1660 order/models.py:452 order/models.py:1559
+#: order/models.py:1677
 #: report/templates/report/inventree_purchase_order_report.html:14
 #: stock/serializers.py:123 templates/email/overdue_purchase_order.html:15
 msgid "Purchase Order"
 msgstr "採購訂單"
 
-#: order/api.py:1656 order/models.py:1020 order/models.py:1817
-#: order/models.py:1945 order/models.py:2111
+#: order/api.py:1662 order/models.py:975 order/models.py:1728
+#: order/models.py:1856 order/models.py:2022
 #: report/templates/report/inventree_build_order_report.html:135
 #: report/templates/report/inventree_sales_order_report.html:14
 #: report/templates/report/inventree_sales_order_shipment_report.html:15
@@ -4215,452 +4258,452 @@ msgstr "採購訂單"
 msgid "Sales Order"
 msgstr "銷售訂單"
 
-#: order/api.py:1658 order/models.py:2282 order/models.py:2614
-#: order/models.py:2680
+#: order/api.py:1664 order/models.py:2193 order/models.py:2518
+#: order/models.py:2584
 #: report/templates/report/inventree_return_order_report.html:13
 msgid "Return Order"
 msgstr "退貨訂單"
 
-#: order/models.py:89
+#: order/models.py:88
 #: report/templates/report/inventree_purchase_order_report.html:31
 #: report/templates/report/inventree_sales_order_report.html:31
 msgid "Total Price"
 msgstr "總價格"
 
-#: order/models.py:90
+#: order/models.py:89
 msgid "Total price for this order"
 msgstr "此訂單的總價"
 
-#: order/models.py:95 order/serializers.py:75
+#: order/models.py:94 order/serializers.py:75
 msgid "Order Currency"
 msgstr "訂單貨幣"
 
-#: order/models.py:98 order/serializers.py:76
+#: order/models.py:97 order/serializers.py:76
 msgid "Currency for this order (leave blank to use company default)"
 msgstr "此訂單的貨幣 (留空以使用公司默認值)"
 
-#: order/models.py:237
+#: order/models.py:236
 msgid "This order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:284
+#: order/models.py:283
 msgid "Contact does not match selected company"
 msgstr "聯繫人與所選公司不匹配"
 
-#: order/models.py:291
+#: order/models.py:290
 msgid "Start date must be before target date"
 msgstr ""
 
-#: order/models.py:344
+#: order/models.py:343
 msgid "Order description (optional)"
 msgstr "訂單描述 (可選)"
 
-#: order/models.py:353
+#: order/models.py:352
 msgid "Select project code for this order"
 msgstr "為此訂單選擇項目編碼"
 
-#: order/models.py:359 order/models.py:1548 order/models.py:1999
+#: order/models.py:358 order/models.py:1459 order/models.py:1910
 msgid "Link to external page"
 msgstr "鏈接到外部頁面"
 
-#: order/models.py:366
+#: order/models.py:365
 msgid "Start date"
 msgstr ""
 
-#: order/models.py:367
+#: order/models.py:366
 msgid "Scheduled start date for this order"
 msgstr ""
 
-#: order/models.py:373 order/models.py:1555 order/serializers.py:266
+#: order/models.py:372 order/models.py:1466 order/serializers.py:267
 #: report/templates/report/inventree_build_order_report.html:125
 msgid "Target Date"
 msgstr "預計日期"
 
-#: order/models.py:375
+#: order/models.py:374
 msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr "訂單交付的預期日期。訂單將在此日期後過期。"
 
-#: order/models.py:397
-msgid "User or group responsible for this order"
-msgstr "負責此訂單的用户或組"
-
-#: order/models.py:408
-msgid "Point of contact for this order"
-msgstr "此訂單的聯繫人"
-
-#: order/models.py:418
-msgid "Company address for this order"
-msgstr "此訂單的公司地址"
-
-#: order/models.py:538 order/models.py:1110
-msgid "Order reference"
-msgstr "訂單參考"
-
-#: order/models.py:548
-msgid "Purchase order status"
-msgstr "採購訂單狀態"
-
-#: order/models.py:563
-msgid "Company from which the items are being ordered"
-msgstr "訂購物品的公司"
-
-#: order/models.py:574
-msgid "Supplier Reference"
-msgstr "供應商參考"
-
-#: order/models.py:575
-msgid "Supplier order reference code"
-msgstr "供應商訂單參考代碼"
-
-#: order/models.py:584
-msgid "received by"
-msgstr "接收人"
-
-#: order/models.py:590 order/models.py:2369
+#: order/models.py:394
 msgid "Issue Date"
 msgstr "簽發日期"
 
-#: order/models.py:591 order/models.py:2370
+#: order/models.py:395
 msgid "Date order was issued"
 msgstr "訂單發出日期"
 
-#: order/models.py:598 order/models.py:2377
+#: order/models.py:403
+msgid "User or group responsible for this order"
+msgstr "負責此訂單的用户或組"
+
+#: order/models.py:414
+msgid "Point of contact for this order"
+msgstr "此訂單的聯繫人"
+
+#: order/models.py:424
+msgid "Company address for this order"
+msgstr "此訂單的公司地址"
+
+#: order/models.py:500 order/models.py:1021
+msgid "Order reference"
+msgstr "訂單參考"
+
+#: order/models.py:510
+msgid "Purchase order status"
+msgstr "採購訂單狀態"
+
+#: order/models.py:525
+msgid "Company from which the items are being ordered"
+msgstr "訂購物品的公司"
+
+#: order/models.py:536
+msgid "Supplier Reference"
+msgstr "供應商參考"
+
+#: order/models.py:537
+msgid "Supplier order reference code"
+msgstr "供應商訂單參考代碼"
+
+#: order/models.py:546
+msgid "received by"
+msgstr "接收人"
+
+#: order/models.py:553 order/models.py:2281
 msgid "Date order was completed"
 msgstr "訂單完成日期"
 
-#: order/models.py:607 order/models.py:1695
+#: order/models.py:562 order/models.py:1606
 msgid "Destination"
 msgstr "目的地"
 
-#: order/models.py:608 order/models.py:1699
+#: order/models.py:563 order/models.py:1610
 msgid "Destination for received items"
 msgstr ""
 
-#: order/models.py:654
+#: order/models.py:609
 msgid "Part supplier must match PO supplier"
 msgstr "零件供應商必須與採購訂單供應商匹配"
 
-#: order/models.py:912
+#: order/models.py:867
 msgid "Quantity must be a positive number"
 msgstr "數量必須是正數"
 
-#: order/models.py:1121 order/models.py:2342 stock/models.py:923
+#: order/models.py:1032 order/models.py:2253 stock/models.py:923
 #: stock/models.py:924 stock/serializers.py:1373
 #: templates/email/overdue_sales_order.html:16
 msgid "Customer"
 msgstr "客户"
 
-#: order/models.py:1122
+#: order/models.py:1033
 msgid "Company to which the items are being sold"
 msgstr "出售物品的公司"
 
-#: order/models.py:1135
+#: order/models.py:1046
 msgid "Sales order status"
 msgstr "銷售訂單狀態"
 
-#: order/models.py:1146 order/models.py:2362
+#: order/models.py:1057 order/models.py:2273
 msgid "Customer Reference "
 msgstr "客户參考 "
 
-#: order/models.py:1147 order/models.py:2363
+#: order/models.py:1058 order/models.py:2274
 msgid "Customer order reference code"
 msgstr "客户訂單參考代碼"
 
-#: order/models.py:1151 order/models.py:1951
+#: order/models.py:1062 order/models.py:1862
 msgid "Shipment Date"
 msgstr "發貨日期"
 
-#: order/models.py:1160
+#: order/models.py:1071
 msgid "shipped by"
 msgstr "發貨人"
 
-#: order/models.py:1199
+#: order/models.py:1110
 msgid "Order is already complete"
 msgstr "訂單已完成"
 
-#: order/models.py:1202
+#: order/models.py:1113
 msgid "Order is already cancelled"
 msgstr "訂單已取消"
 
-#: order/models.py:1206
+#: order/models.py:1117
 msgid "Only an open order can be marked as complete"
 msgstr "只有未結訂單才能標記為已完成"
 
-#: order/models.py:1210
+#: order/models.py:1121
 msgid "Order cannot be completed as there are incomplete shipments"
 msgstr "由於發貨不完整,訂單無法完成"
 
-#: order/models.py:1215
+#: order/models.py:1126
 msgid "Order cannot be completed as there are incomplete allocations"
 msgstr ""
 
-#: order/models.py:1220
+#: order/models.py:1131
 msgid "Order cannot be completed as there are incomplete line items"
 msgstr "訂單無法完成,因為行項目不完整"
 
-#: order/models.py:1497 order/models.py:1510
+#: order/models.py:1408 order/models.py:1421
 msgid "The order is locked and cannot be modified"
 msgstr ""
 
-#: order/models.py:1518
+#: order/models.py:1429
 msgid "Item quantity"
 msgstr "項目數量"
 
-#: order/models.py:1535
+#: order/models.py:1446
 msgid "Line item reference"
 msgstr "行項目參考"
 
-#: order/models.py:1542
+#: order/models.py:1453
 msgid "Line item notes"
 msgstr "行項目註釋"
 
-#: order/models.py:1557
+#: order/models.py:1468
 msgid "Target date for this line item (leave blank to use the target date from the order)"
 msgstr "此行項目的目標日期 (留空以使用訂單中的目標日期)"
 
-#: order/models.py:1578
+#: order/models.py:1489
 msgid "Line item description (optional)"
 msgstr "行項目描述 (可選)"
 
-#: order/models.py:1585
+#: order/models.py:1496
 msgid "Additional context for this line"
 msgstr "此行的附加上下文"
 
-#: order/models.py:1595
+#: order/models.py:1506
 msgid "Unit price"
 msgstr "單位價格"
 
-#: order/models.py:1609
+#: order/models.py:1520
 msgid "Purchase Order Line Item"
 msgstr "採購訂單行項目"
 
-#: order/models.py:1633
+#: order/models.py:1544
 msgid "Supplier part must match supplier"
 msgstr "供應商零件必須與供應商匹配"
 
-#: order/models.py:1667
+#: order/models.py:1578
 msgid "Supplier part"
 msgstr "供應商零件"
 
-#: order/models.py:1674
+#: order/models.py:1585
 msgid "Received"
 msgstr "已接收"
 
-#: order/models.py:1675
+#: order/models.py:1586
 msgid "Number of items received"
 msgstr "收到的物品數量"
 
-#: order/models.py:1683 stock/models.py:1046 stock/serializers.py:670
+#: order/models.py:1594 stock/models.py:1046 stock/serializers.py:670
 msgid "Purchase Price"
 msgstr "採購價格"
 
-#: order/models.py:1684
+#: order/models.py:1595
 msgid "Unit purchase price"
 msgstr "每單位的採購價格"
 
-#: order/models.py:1754
+#: order/models.py:1665
 msgid "Purchase Order Extra Line"
 msgstr "採購訂單附加行"
 
-#: order/models.py:1783
+#: order/models.py:1694
 msgid "Sales Order Line Item"
 msgstr "銷售訂單行項目"
 
-#: order/models.py:1804
+#: order/models.py:1715
 msgid "Virtual part cannot be assigned to a sales order"
 msgstr "虛擬零件不能分配給銷售訂單"
 
-#: order/models.py:1809
+#: order/models.py:1720
 msgid "Only salable parts can be assigned to a sales order"
 msgstr "只有可銷售的零件才能分配給銷售訂單"
 
-#: order/models.py:1835
+#: order/models.py:1746
 msgid "Sale Price"
 msgstr "售出價格"
 
-#: order/models.py:1836
+#: order/models.py:1747
 msgid "Unit sale price"
 msgstr "單位售出價格"
 
-#: order/models.py:1845 order/status_codes.py:50
+#: order/models.py:1756 order/status_codes.py:50
 msgid "Shipped"
 msgstr "已配送"
 
-#: order/models.py:1846
+#: order/models.py:1757
 msgid "Shipped quantity"
 msgstr "發貨數量"
 
-#: order/models.py:1920
+#: order/models.py:1831
 msgid "Sales Order Shipment"
 msgstr "銷售訂單發貨"
 
-#: order/models.py:1952
+#: order/models.py:1863
 msgid "Date of shipment"
 msgstr "發貨日期"
 
-#: order/models.py:1958
+#: order/models.py:1869
 msgid "Delivery Date"
 msgstr "送達日期"
 
-#: order/models.py:1959
+#: order/models.py:1870
 msgid "Date of delivery of shipment"
 msgstr "裝運交貨日期"
 
-#: order/models.py:1967
+#: order/models.py:1878
 msgid "Checked By"
 msgstr "審核人"
 
-#: order/models.py:1968
+#: order/models.py:1879
 msgid "User who checked this shipment"
 msgstr "檢查此裝運的用户"
 
-#: order/models.py:1975 order/models.py:2207 order/serializers.py:1677
+#: order/models.py:1886 order/models.py:2118 order/serializers.py:1677
 #: order/serializers.py:1801
 #: report/templates/report/inventree_sales_order_shipment_report.html:14
 msgid "Shipment"
 msgstr "配送"
 
-#: order/models.py:1976
+#: order/models.py:1887
 msgid "Shipment number"
 msgstr "配送單號"
 
-#: order/models.py:1984
+#: order/models.py:1895
 msgid "Tracking Number"
 msgstr "跟蹤單號"
 
-#: order/models.py:1985
+#: order/models.py:1896
 msgid "Shipment tracking information"
 msgstr "配送跟蹤信息"
 
-#: order/models.py:1992
+#: order/models.py:1903
 msgid "Invoice Number"
 msgstr "發票編號"
 
-#: order/models.py:1993
+#: order/models.py:1904
 msgid "Reference number for associated invoice"
 msgstr "相關發票的參考號"
 
-#: order/models.py:2016
+#: order/models.py:1927
 msgid "Shipment has already been sent"
 msgstr "貨物已發出"
 
-#: order/models.py:2019
+#: order/models.py:1930
 msgid "Shipment has no allocated stock items"
 msgstr "發貨沒有分配庫存項目"
 
-#: order/models.py:2099
+#: order/models.py:2010
 msgid "Sales Order Extra Line"
 msgstr "銷售訂單加行"
 
-#: order/models.py:2128
+#: order/models.py:2039
 msgid "Sales Order Allocation"
 msgstr "銷售訂單分配"
 
-#: order/models.py:2151 order/models.py:2153
+#: order/models.py:2062 order/models.py:2064
 msgid "Stock item has not been assigned"
 msgstr "庫存項目尚未分配"
 
-#: order/models.py:2160
+#: order/models.py:2071
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr "無法將庫存項目分配給具有不同零件的行"
 
-#: order/models.py:2163
+#: order/models.py:2074
 msgid "Cannot allocate stock to a line without a part"
 msgstr "無法將庫存分配給沒有零件的生產線"
 
-#: order/models.py:2166
+#: order/models.py:2077
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr "分配數量不能超過庫存數量"
 
-#: order/models.py:2185 order/serializers.py:1547
+#: order/models.py:2096 order/serializers.py:1547
 msgid "Quantity must be 1 for serialized stock item"
 msgstr "序列化庫存項目的數量必須為1"
 
-#: order/models.py:2188
+#: order/models.py:2099
 msgid "Sales order does not match shipment"
 msgstr "銷售訂單與發貨不匹配"
 
-#: order/models.py:2189 plugin/base/barcodes/api.py:651
+#: order/models.py:2100 plugin/base/barcodes/api.py:651
 msgid "Shipment does not match sales order"
 msgstr "發貨與銷售訂單不匹配"
 
-#: order/models.py:2197
+#: order/models.py:2108
 msgid "Line"
 msgstr "行"
 
-#: order/models.py:2208
+#: order/models.py:2119
 msgid "Sales order shipment reference"
 msgstr "銷售訂單發貨參考"
 
-#: order/models.py:2221 order/models.py:2621
+#: order/models.py:2132 order/models.py:2525
 msgid "Item"
 msgstr "項目"
 
-#: order/models.py:2222
+#: order/models.py:2133
 msgid "Select stock item to allocate"
 msgstr "選擇要分配的庫存項目"
 
-#: order/models.py:2231
+#: order/models.py:2142
 msgid "Enter stock allocation quantity"
 msgstr "輸入庫存分配數量"
 
-#: order/models.py:2331
+#: order/models.py:2242
 msgid "Return Order reference"
 msgstr "退貨訂單參考"
 
-#: order/models.py:2343
+#: order/models.py:2254
 msgid "Company from which items are being returned"
 msgstr "退回物品的公司"
 
-#: order/models.py:2356
+#: order/models.py:2267
 msgid "Return order status"
 msgstr "退貨訂單狀態"
 
-#: order/models.py:2579
+#: order/models.py:2483
 msgid "Return Order Line Item"
 msgstr "退貨訂單行項目"
 
-#: order/models.py:2592
+#: order/models.py:2496
 msgid "Stock item must be specified"
 msgstr ""
 
-#: order/models.py:2596
+#: order/models.py:2500
 msgid "Return quantity exceeds stock quantity"
 msgstr ""
 
-#: order/models.py:2601
+#: order/models.py:2505
 msgid "Return quantity must be greater than zero"
 msgstr ""
 
-#: order/models.py:2606
+#: order/models.py:2510
 msgid "Invalid quantity for serialized stock item"
 msgstr ""
 
-#: order/models.py:2622
+#: order/models.py:2526
 msgid "Select item to return from customer"
 msgstr "選擇要從客户處退回的商品"
 
-#: order/models.py:2637
+#: order/models.py:2541
 msgid "Received Date"
 msgstr "接收日期"
 
-#: order/models.py:2638
+#: order/models.py:2542
 msgid "The date this this return item was received"
 msgstr "收到此退貨的日期"
 
-#: order/models.py:2650
+#: order/models.py:2554
 msgid "Outcome"
 msgstr "結果"
 
-#: order/models.py:2651
+#: order/models.py:2555
 msgid "Outcome for this line item"
 msgstr "該行項目的結果"
 
-#: order/models.py:2658
+#: order/models.py:2562
 msgid "Cost associated with return or repair for this line item"
 msgstr "與此行項目的退貨或維修相關的成本"
 
-#: order/models.py:2668
+#: order/models.py:2572
 msgid "Return Order Extra Line"
 msgstr "退貨訂單附加行"
 
@@ -4707,7 +4750,7 @@ msgstr "複製訂單"
 msgid "Specify options for duplicating this order"
 msgstr "指定複製此訂單的選項"
 
-#: order/serializers.py:246
+#: order/serializers.py:247
 msgid "Invalid order ID"
 msgstr "訂單ID不正確"
 
@@ -4751,7 +4794,7 @@ msgstr "合併項目"
 msgid "Merge items with the same part, destination and target date into one line item"
 msgstr "將具有相同零件、目的地和目標日期的項目合併到一個行項目中"
 
-#: order/serializers.py:655 part/serializers.py:614
+#: order/serializers.py:655 part/serializers.py:563
 msgid "SKU"
 msgstr "庫存量單位"
 
@@ -4787,7 +4830,7 @@ msgstr "行項目"
 msgid "Line item does not match purchase order"
 msgstr "行項目與採購訂單不匹配"
 
-#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2021
+#: order/serializers.py:760 order/serializers.py:911 order/serializers.py:2020
 msgid "Select destination location for received items"
 msgstr "為收到的物品選擇目的地位置"
 
@@ -4811,7 +4854,7 @@ msgstr "輸入入庫庫存項目的序列號"
 msgid "Override packaging information for incoming stock items"
 msgstr "覆蓋傳入庫存項目的包裝資料"
 
-#: order/serializers.py:814 order/serializers.py:2026
+#: order/serializers.py:814 order/serializers.py:2025
 msgid "Additional note for incoming stock items"
 msgstr "傳入庫存項目的附加説明"
 
@@ -4831,7 +4874,7 @@ msgstr "條形碼已被使用"
 msgid "An integer quantity must be provided for trackable parts"
 msgstr "必須為可跟蹤零件提供整數數量"
 
-#: order/serializers.py:928 order/serializers.py:2045
+#: order/serializers.py:928 order/serializers.py:2044
 msgid "Line items must be provided"
 msgstr "必須提供行項目"
 
@@ -4891,32 +4934,32 @@ msgstr "未找到以下序列號的匹配項"
 msgid "The following serial numbers are unavailable"
 msgstr "以下序列號不可用"
 
-#: order/serializers.py:1982
+#: order/serializers.py:1981
 msgid "Return order line item"
 msgstr "退貨訂單行項目"
 
-#: order/serializers.py:1989 stock/serializers.py:1008
+#: order/serializers.py:1988 stock/serializers.py:1008
 #: stock/serializers.py:1627
 msgid "Stock item status code"
 msgstr "庫存項狀態代碼"
 
-#: order/serializers.py:1997
+#: order/serializers.py:1996
 msgid "Line item does not match return order"
 msgstr "行項目與退貨訂單不匹配"
 
-#: order/serializers.py:2000
+#: order/serializers.py:1999
 msgid "Line item has already been received"
 msgstr "行項目已收到"
 
-#: order/serializers.py:2037
+#: order/serializers.py:2036
 msgid "Items can only be received against orders which are in progress"
 msgstr "只能根據正在進行的訂單接收物品"
 
-#: order/serializers.py:2129
+#: order/serializers.py:2128
 msgid "Quantity to return"
 msgstr ""
 
-#: order/serializers.py:2141
+#: order/serializers.py:2140
 msgid "Line price currency"
 msgstr "行價格貨幣"
 
@@ -4970,107 +5013,103 @@ msgstr "逾期銷售訂單"
 msgid "Sales order {so} is now overdue"
 msgstr "銷售訂單 {so} 已逾期"
 
-#: part/api.py:103
+#: part/api.py:114
 msgid "Starred"
 msgstr "已加星標"
 
-#: part/api.py:105
+#: part/api.py:116
 msgid "Filter by starred categories"
 msgstr "按星標類別篩選"
 
-#: part/api.py:122 stock/api.py:254
+#: part/api.py:133 stock/api.py:254
 msgid "Depth"
 msgstr "深度"
 
-#: part/api.py:122
+#: part/api.py:133
 msgid "Filter by category depth"
 msgstr "按類別深度篩選"
 
-#: part/api.py:140 stock/api.py:272
+#: part/api.py:151 stock/api.py:272
 msgid "Top Level"
 msgstr "頂級"
 
-#: part/api.py:142
+#: part/api.py:153
 msgid "Filter by top-level categories"
 msgstr "按頂級類別篩選"
 
-#: part/api.py:155 stock/api.py:287
+#: part/api.py:166 stock/api.py:287
 msgid "Cascade"
 msgstr "級聯"
 
-#: part/api.py:157
+#: part/api.py:168
 msgid "Include sub-categories in filtered results"
 msgstr "在篩選結果中包含子類別"
 
-#: part/api.py:177
+#: part/api.py:188
 msgid "Parent"
 msgstr "父類"
 
-#: part/api.py:179
+#: part/api.py:190
 msgid "Filter by parent category"
 msgstr "按父類別篩選"
 
-#: part/api.py:212
-msgid "Exclude Tree"
-msgstr "排除樹"
-
-#: part/api.py:214
+#: part/api.py:225
 msgid "Exclude sub-categories under the specified category"
 msgstr "排除指定類別下的子類別"
 
-#: part/api.py:439
+#: part/api.py:437
 msgid "Has Results"
 msgstr "有結果"
 
-#: part/api.py:606
+#: part/api.py:604
 msgid "Incoming Purchase Order"
 msgstr "收到的採購訂單"
 
-#: part/api.py:620
+#: part/api.py:618
 msgid "Outgoing Sales Order"
 msgstr "外發銷售訂單"
 
-#: part/api.py:632
+#: part/api.py:630
 msgid "Stock produced by Build Order"
 msgstr "建造生產訂單產生的庫存"
 
-#: part/api.py:714
+#: part/api.py:712
 msgid "Stock required for Build Order"
 msgstr "生產訂單所需的庫存"
 
-#: part/api.py:860
+#: part/api.py:858
 msgid "Validate entire Bill of Materials"
 msgstr "驗證整個物料清單"
 
-#: part/api.py:866
+#: part/api.py:864
 msgid "This option must be selected"
 msgstr "必須選擇此項"
 
-#: part/api.py:902
+#: part/api.py:900
 msgid "Is Variant"
 msgstr ""
 
-#: part/api.py:910
+#: part/api.py:908
 msgid "Is Revision"
 msgstr "是修訂版本"
 
-#: part/api.py:920
+#: part/api.py:918
 msgid "Has Revisions"
 msgstr "有修訂版本"
 
-#: part/api.py:1111
+#: part/api.py:1109
 msgid "BOM Valid"
 msgstr "物料清單合規"
 
-#: part/api.py:1773
+#: part/api.py:1764
 msgid "Assembly part is testable"
 msgstr "裝配部份是可測試的"
 
-#: part/api.py:1782
+#: part/api.py:1773
 msgid "Component part is testable"
 msgstr "組件部份是可測試的"
 
-#: part/api.py:1833
+#: part/api.py:1824
 msgid "Uses"
 msgstr "使用"
 
@@ -5120,7 +5159,7 @@ msgid "You cannot make this part category structural because some parts are alre
 msgstr "您不能使這個零件類別結構化,因為有些零件已經分配給了它!"
 
 #: part/models.py:418 part/serializers.py:128 part/serializers.py:337
-#: part/serializers.py:481 users/models.py:201
+#: users/models.py:201
 msgid "Parts"
 msgstr "零件"
 
@@ -5235,7 +5274,7 @@ msgstr "提高搜索結果可見性的零件關鍵字"
 msgid "Part category"
 msgstr "零件類別"
 
-#: part/models.py:1047 part/serializers.py:969
+#: part/models.py:1047 part/serializers.py:918
 #: report/templates/report/inventree_stock_location_report.html:103
 msgid "IPN"
 msgstr "內部零件號 IPN"
@@ -5244,7 +5283,7 @@ msgstr "內部零件號 IPN"
 msgid "Part revision or version number"
 msgstr "零件修訂版本或版本號"
 
-#: part/models.py:1056 report/models.py:184
+#: part/models.py:1056 report/models.py:157
 msgid "Revision"
 msgstr "版本"
 
@@ -5276,7 +5315,7 @@ msgstr "默認到期"
 msgid "Expiry time (in days) for stock items of this part"
 msgstr "此零件庫存項的過期時間 (天)"
 
-#: part/models.py:1154 part/serializers.py:998
+#: part/models.py:1154 part/serializers.py:947
 msgid "Minimum Stock"
 msgstr "最低庫存"
 
@@ -5613,7 +5652,7 @@ msgstr "測試説明"
 msgid "Enter description for this test"
 msgstr "輸入測試的描述"
 
-#: part/models.py:3635 report/models.py:239
+#: part/models.py:3635 report/models.py:213
 msgid "Enabled"
 msgstr "已啓用"
 
@@ -5897,309 +5936,301 @@ msgstr ""
 msgid "Number of parts using this template"
 msgstr "使用此模板的零件數"
 
-#: part/serializers.py:487
-msgid "No parts selected"
-msgstr "沒有選定零件"
-
-#: part/serializers.py:497
-msgid "Select category"
-msgstr "選擇類別"
-
-#: part/serializers.py:532
+#: part/serializers.py:481
 msgid "Original Part"
 msgstr "原始零件"
 
-#: part/serializers.py:533
+#: part/serializers.py:482
 msgid "Select original part to duplicate"
 msgstr "選擇要複製的原始零件"
 
-#: part/serializers.py:538
+#: part/serializers.py:487
 msgid "Copy Image"
 msgstr "複製圖片"
 
-#: part/serializers.py:539
+#: part/serializers.py:488
 msgid "Copy image from original part"
 msgstr "從原零件複製圖片"
 
-#: part/serializers.py:545
+#: part/serializers.py:494
 msgid "Copy BOM"
 msgstr "複製物料清單"
 
-#: part/serializers.py:546
+#: part/serializers.py:495
 msgid "Copy bill of materials from original part"
 msgstr "從原始零件複製材料清單"
 
-#: part/serializers.py:552
+#: part/serializers.py:501
 msgid "Copy Parameters"
 msgstr "複製參數"
 
-#: part/serializers.py:553
+#: part/serializers.py:502
 msgid "Copy parameter data from original part"
 msgstr "從原始零件複製參數數據"
 
-#: part/serializers.py:559
+#: part/serializers.py:508
 msgid "Copy Notes"
 msgstr "複製備註"
 
-#: part/serializers.py:560
+#: part/serializers.py:509
 msgid "Copy notes from original part"
 msgstr "從原始零件複製備註"
 
-#: part/serializers.py:578
+#: part/serializers.py:527
 msgid "Initial Stock Quantity"
 msgstr "初始化庫存數量"
 
-#: part/serializers.py:580
+#: part/serializers.py:529
 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
 msgstr "指定此零件的初始庫存數量。如果數量為零,則不添加任何庫存。"
 
-#: part/serializers.py:587
+#: part/serializers.py:536
 msgid "Initial Stock Location"
 msgstr "初始化庫存地點"
 
-#: part/serializers.py:588
+#: part/serializers.py:537
 msgid "Specify initial stock location for this Part"
 msgstr "初始化指定此零件的庫存地點"
 
-#: part/serializers.py:605
+#: part/serializers.py:554
 msgid "Select supplier (or leave blank to skip)"
 msgstr "選擇供應商(或為空以跳過)"
 
-#: part/serializers.py:621
+#: part/serializers.py:570
 msgid "Select manufacturer (or leave blank to skip)"
 msgstr "選擇製造商(或為空)"
 
-#: part/serializers.py:631
+#: part/serializers.py:580
 msgid "Manufacturer part number"
 msgstr "製造商零件號"
 
-#: part/serializers.py:638
+#: part/serializers.py:587
 msgid "Selected company is not a valid supplier"
 msgstr "所選公司不是一個有效的供應商"
 
-#: part/serializers.py:647
+#: part/serializers.py:596
 msgid "Selected company is not a valid manufacturer"
 msgstr "所選公司不是一個有效的製造商"
 
-#: part/serializers.py:658
+#: part/serializers.py:607
 msgid "Manufacturer part matching this MPN already exists"
 msgstr "與此製造商零件編號 (MPN) 的相匹配的製造商零件已存在"
 
-#: part/serializers.py:665
+#: part/serializers.py:614
 msgid "Supplier part matching this SKU already exists"
 msgstr "匹配此庫存單位 (SKU) 的供應商零件已存在"
 
-#: part/serializers.py:954 part/stocktake.py:222
+#: part/serializers.py:903 part/stocktake.py:222
 msgid "Category Name"
 msgstr "類別名稱"
 
-#: part/serializers.py:979
+#: part/serializers.py:928
 msgid "Building"
 msgstr "正在生產"
 
-#: part/serializers.py:984 part/stocktake.py:223 stock/serializers.py:1050
+#: part/serializers.py:933 part/stocktake.py:223 stock/serializers.py:1050
 #: stock/serializers.py:1228 users/models.py:204
 msgid "Stock Items"
 msgstr "庫存項"
 
-#: part/serializers.py:985
+#: part/serializers.py:934
 msgid "Revisions"
 msgstr "修訂"
 
-#: part/serializers.py:986
+#: part/serializers.py:935
 msgid "Suppliers"
 msgstr "供應商"
 
-#: part/serializers.py:987 templates/email/low_stock_notification.html:16
+#: part/serializers.py:936 templates/email/low_stock_notification.html:16
 msgid "Total Stock"
 msgstr "庫存總量"
 
-#: part/serializers.py:990
+#: part/serializers.py:939
 msgid "Unallocated Stock"
 msgstr "未分配的庫存"
 
-#: part/serializers.py:995
+#: part/serializers.py:944
 msgid "Variant Stock"
 msgstr "變體庫存"
 
-#: part/serializers.py:1027
+#: part/serializers.py:976
 msgid "Duplicate Part"
 msgstr "重複零件"
 
-#: part/serializers.py:1028
+#: part/serializers.py:977
 msgid "Copy initial data from another Part"
 msgstr "從另一個零件複製初始數據"
 
-#: part/serializers.py:1034
+#: part/serializers.py:983
 msgid "Initial Stock"
 msgstr "初始庫存"
 
-#: part/serializers.py:1035
+#: part/serializers.py:984
 msgid "Create Part with initial stock quantity"
 msgstr "創建具有初始庫存數量的零件"
 
-#: part/serializers.py:1041
+#: part/serializers.py:990
 msgid "Supplier Information"
 msgstr "供應商信息"
 
-#: part/serializers.py:1042
+#: part/serializers.py:991
 msgid "Add initial supplier information for this part"
 msgstr "添加此零件的初始供應商信息"
 
-#: part/serializers.py:1050
+#: part/serializers.py:999
 msgid "Copy Category Parameters"
 msgstr "複製類別參數"
 
-#: part/serializers.py:1051
+#: part/serializers.py:1000
 msgid "Copy parameter templates from selected part category"
 msgstr "從選擇的零件複製參數模版"
 
-#: part/serializers.py:1056
+#: part/serializers.py:1005
 msgid "Existing Image"
 msgstr "現有的圖片"
 
-#: part/serializers.py:1057
+#: part/serializers.py:1006
 msgid "Filename of an existing part image"
 msgstr "現有零件圖片的文件名"
 
-#: part/serializers.py:1074
+#: part/serializers.py:1023
 msgid "Image file does not exist"
 msgstr "圖片不存在"
 
-#: part/serializers.py:1278
+#: part/serializers.py:1227
 msgid "Limit stocktake report to a particular part, and any variant parts"
 msgstr "限制盤點報告到某個特定零件以及任何變體零件"
 
-#: part/serializers.py:1288
+#: part/serializers.py:1237
 msgid "Limit stocktake report to a particular part category, and any child categories"
 msgstr "限制盤點報告到某個特定零件類別以及任何子類別"
 
-#: part/serializers.py:1298
+#: part/serializers.py:1247
 msgid "Limit stocktake report to a particular stock location, and any child locations"
 msgstr "限制盤點報告到某個特定零件庫存地點以及任何子位置"
 
-#: part/serializers.py:1304
+#: part/serializers.py:1253
 msgid "Exclude External Stock"
 msgstr "排除外部庫存"
 
-#: part/serializers.py:1305
+#: part/serializers.py:1254
 msgid "Exclude stock items in external locations"
 msgstr "排除外部位置的庫存項"
 
-#: part/serializers.py:1310
+#: part/serializers.py:1259
 msgid "Generate Report"
 msgstr "生成報告"
 
-#: part/serializers.py:1311
+#: part/serializers.py:1260
 msgid "Generate report file containing calculated stocktake data"
 msgstr "生成包含計算出來的盤點數據的報告文件"
 
-#: part/serializers.py:1316
+#: part/serializers.py:1265
 msgid "Update Parts"
 msgstr "更新零件"
 
-#: part/serializers.py:1317
+#: part/serializers.py:1266
 msgid "Update specified parts with calculated stocktake data"
 msgstr "使用計算出的盤點數據更新指定零件"
 
-#: part/serializers.py:1325
+#: part/serializers.py:1274
 msgid "Stocktake functionality is not enabled"
 msgstr "盤點功能未啓用"
 
-#: part/serializers.py:1330
+#: part/serializers.py:1279
 msgid "Background worker check failed"
 msgstr "後台執行器檢查失敗"
 
-#: part/serializers.py:1431
+#: part/serializers.py:1380
 msgid "Minimum Price"
 msgstr "最低價格"
 
-#: part/serializers.py:1432
+#: part/serializers.py:1381
 msgid "Override calculated value for minimum price"
 msgstr "覆蓋已計算的最低價格值"
 
-#: part/serializers.py:1439
+#: part/serializers.py:1388
 msgid "Minimum price currency"
 msgstr "最低價格貨幣"
 
-#: part/serializers.py:1446
+#: part/serializers.py:1395
 msgid "Maximum Price"
 msgstr "最高價格"
 
-#: part/serializers.py:1447
+#: part/serializers.py:1396
 msgid "Override calculated value for maximum price"
 msgstr "覆蓋已計算的最高價格值"
 
-#: part/serializers.py:1454
+#: part/serializers.py:1403
 msgid "Maximum price currency"
 msgstr "最高價格貨幣"
 
-#: part/serializers.py:1483
+#: part/serializers.py:1432
 msgid "Update"
 msgstr "更新"
 
-#: part/serializers.py:1484
+#: part/serializers.py:1433
 msgid "Update pricing for this part"
 msgstr "更新這個零件的價格"
 
-#: part/serializers.py:1507
+#: part/serializers.py:1456
 #, python-brace-format
 msgid "Could not convert from provided currencies to {default_currency}"
 msgstr "無法將所提供的貨幣轉換為 {default_currency}"
 
-#: part/serializers.py:1514
+#: part/serializers.py:1463
 msgid "Minimum price must not be greater than maximum price"
 msgstr "最低價格不能高於最高價格。"
 
-#: part/serializers.py:1517
+#: part/serializers.py:1466
 msgid "Maximum price must not be less than minimum price"
 msgstr "最高價格不能低於最低價格"
 
-#: part/serializers.py:1668
+#: part/serializers.py:1619
 msgid "Select the parent assembly"
 msgstr "選擇父裝配"
 
-#: part/serializers.py:1682
+#: part/serializers.py:1633
 msgid "Select the component part"
 msgstr "選擇零部件"
 
-#: part/serializers.py:1697
+#: part/serializers.py:1648
 msgid "Can Build"
 msgstr "可以創建"
 
-#: part/serializers.py:1921
+#: part/serializers.py:1872
 msgid "Select part to copy BOM from"
 msgstr "選擇要複製物料清單的零件"
 
-#: part/serializers.py:1929
+#: part/serializers.py:1880
 msgid "Remove Existing Data"
 msgstr "移除現有數據"
 
-#: part/serializers.py:1930
+#: part/serializers.py:1881
 msgid "Remove existing BOM items before copying"
 msgstr "複製前刪除現有的物料清單項目"
 
-#: part/serializers.py:1935
+#: part/serializers.py:1886
 msgid "Include Inherited"
 msgstr "包含繼承的"
 
-#: part/serializers.py:1936
+#: part/serializers.py:1887
 msgid "Include BOM items which are inherited from templated parts"
 msgstr "包含從模板零件繼承的物料清單項目"
 
-#: part/serializers.py:1941
+#: part/serializers.py:1892
 msgid "Skip Invalid Rows"
 msgstr "跳過無效行"
 
-#: part/serializers.py:1942
+#: part/serializers.py:1893
 msgid "Enable this option to skip invalid rows"
 msgstr "啓用此選項以跳過無效行"
 
-#: part/serializers.py:1947
+#: part/serializers.py:1898
 msgid "Copy Substitute Parts"
 msgstr "複製替代品零件"
 
-#: part/serializers.py:1948
+#: part/serializers.py:1899
 msgid "Copy substitute parts when duplicate BOM items"
 msgstr "複製物料清單項目時複製替代品零件"
 
@@ -6336,28 +6367,28 @@ msgstr "庫存項已分配到銷售訂單"
 msgid "Not enough information"
 msgstr "沒有足夠的信息"
 
-#: plugin/base/barcodes/mixins.py:307
+#: plugin/base/barcodes/mixins.py:308
 #: plugin/builtin/barcodes/inventree_barcode.py:101
 msgid "Found matching item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:373
+#: plugin/base/barcodes/mixins.py:374
 msgid "Supplier part does not match line item"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:376
+#: plugin/base/barcodes/mixins.py:377
 msgid "Line item is already completed"
 msgstr ""
 
-#: plugin/base/barcodes/mixins.py:413
+#: plugin/base/barcodes/mixins.py:414
 msgid "Further information required to receive line item"
 msgstr "需要更多信息以接收行項目"
 
-#: plugin/base/barcodes/mixins.py:421
+#: plugin/base/barcodes/mixins.py:422
 msgid "Received purchase order line item"
 msgstr "已收到採購訂單行項目"
 
-#: plugin/base/barcodes/mixins.py:428
+#: plugin/base/barcodes/mixins.py:429
 msgid "Failed to receive line item"
 msgstr ""
 
@@ -6437,15 +6468,15 @@ msgstr "待分配數"
 msgid "Label printing failed"
 msgstr "標籤打印失敗"
 
-#: plugin/base/label/mixins.py:54
+#: plugin/base/label/mixins.py:55
 msgid "Error rendering label to PDF"
 msgstr "渲染標籤到 PDF 時出錯"
 
-#: plugin/base/label/mixins.py:68
+#: plugin/base/label/mixins.py:69
 msgid "Error rendering label to HTML"
 msgstr "渲染標籤到 HTML 時出錯"
 
-#: plugin/base/label/mixins.py:149
+#: plugin/base/label/mixins.py:146
 msgid "No items provided to print"
 msgstr "沒有要打印的項目"
 
@@ -6494,11 +6525,13 @@ msgid "Provides native support for barcodes"
 msgstr "提供條形碼本地支持"
 
 #: plugin/builtin/barcodes/inventree_barcode.py:30
+#: plugin/builtin/exporter/bom_exporter.py:61
+#: plugin/builtin/exporter/inventree_exporter.py:17
 #: plugin/builtin/integration/core_notifications.py:33
 #: plugin/builtin/integration/currency_exchange.py:21
-#: plugin/builtin/labels/inventree_label.py:22
+#: plugin/builtin/labels/inventree_label.py:26
 #: plugin/builtin/labels/inventree_machine.py:64
-#: plugin/builtin/labels/label_sheet.py:63
+#: plugin/builtin/labels/label_sheet.py:64
 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21
 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21
 msgid "InvenTree contributors"
@@ -6528,6 +6561,112 @@ msgstr "短條形碼前綴"
 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances"
 msgstr "自定義用於短條形碼的前綴,可能對有多個InvenTree實例的環境有用。"
 
+#: plugin/builtin/exporter/bom_exporter.py:17
+msgid "Levels"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:18
+msgid "Number of levels to export"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Stock Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:23
+msgid "Include part stock data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Pricing Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:27
+msgid "Include part pricing data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Supplier Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:31
+msgid "Include supplier data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:36
+msgid "Manufacturer Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:37
+msgid "Include manufacturer data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:42
+msgid "Substitute Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:43
+msgid "Include substitute part data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:48
+msgid "Parameter Data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:49
+msgid "Include part parameter data"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:58
+msgid "Multi-Level BOM Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:59
+msgid "Provides support for exporting multi-level BOMs"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:96
+msgid "BOM Level"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:102
+#, python-brace-format
+msgid "Substitute {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:108
+#, python-brace-format
+msgid "Supplier {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:109
+#, python-brace-format
+msgid "Supplier {n} SKU"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:110
+#, python-brace-format
+msgid "Supplier {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:116
+#, python-brace-format
+msgid "Manufacturer {n}"
+msgstr ""
+
+#: plugin/builtin/exporter/bom_exporter.py:117
+#, python-brace-format
+msgid "Manufacturer {n} MPN"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:14
+msgid "InvenTree Generic Exporter"
+msgstr ""
+
+#: plugin/builtin/exporter/inventree_exporter.py:15
+msgid "Provides support for exporting data from InvenTree"
+msgstr ""
+
 #: plugin/builtin/integration/core_notifications.py:32
 msgid "InvenTree Notifications"
 msgstr "Inventree 通知"
@@ -6574,21 +6713,21 @@ msgstr "InvenTree 貨幣兑換"
 msgid "Default currency exchange integration"
 msgstr "默認貨幣兑換集成"
 
-#: plugin/builtin/labels/inventree_label.py:19
+#: plugin/builtin/labels/inventree_label.py:23
 msgid "InvenTree PDF label printer"
 msgstr "InvenTree PDF 標籤打印機"
 
-#: plugin/builtin/labels/inventree_label.py:20
+#: plugin/builtin/labels/inventree_label.py:24
 msgid "Provides native support for printing PDF labels"
 msgstr "為打印 PDF 標籤提供本機支持"
 
-#: plugin/builtin/labels/inventree_label.py:28
-#: plugin/builtin/labels/label_sheet.py:69
+#: plugin/builtin/labels/inventree_label.py:32
+#: plugin/builtin/labels/label_sheet.py:70
 msgid "Debug mode"
 msgstr "Debug模式"
 
-#: plugin/builtin/labels/inventree_label.py:29
-#: plugin/builtin/labels/label_sheet.py:70
+#: plugin/builtin/labels/inventree_label.py:33
+#: plugin/builtin/labels/label_sheet.py:71
 msgid "Enable debug mode - returns raw HTML instead of PDF"
 msgstr "啓用Debug模式 - 返回原始的 HTML 而不是 PDF"
 
@@ -6608,47 +6747,47 @@ msgstr "最近使用"
 msgid "Options"
 msgstr "選項"
 
-#: plugin/builtin/labels/label_sheet.py:29
+#: plugin/builtin/labels/label_sheet.py:30
 msgid "Page size for the label sheet"
 msgstr "標籤頁大小"
 
-#: plugin/builtin/labels/label_sheet.py:34
+#: plugin/builtin/labels/label_sheet.py:35
 msgid "Skip Labels"
 msgstr "跳過標籤"
 
-#: plugin/builtin/labels/label_sheet.py:35
+#: plugin/builtin/labels/label_sheet.py:36
 msgid "Skip this number of labels when printing label sheets"
 msgstr "打印標籤頁時跳過標籤的數量"
 
-#: plugin/builtin/labels/label_sheet.py:41
+#: plugin/builtin/labels/label_sheet.py:42
 msgid "Border"
 msgstr "邊框"
 
-#: plugin/builtin/labels/label_sheet.py:42
+#: plugin/builtin/labels/label_sheet.py:43
 msgid "Print a border around each label"
 msgstr "打印每個標籤的邊框"
 
-#: plugin/builtin/labels/label_sheet.py:47 report/models.py:338
+#: plugin/builtin/labels/label_sheet.py:48 report/models.py:312
 msgid "Landscape"
 msgstr "橫屏模式"
 
-#: plugin/builtin/labels/label_sheet.py:48
+#: plugin/builtin/labels/label_sheet.py:49
 msgid "Print the label sheet in landscape mode"
 msgstr "在橫屏模式下打印標籤表"
 
-#: plugin/builtin/labels/label_sheet.py:60
+#: plugin/builtin/labels/label_sheet.py:61
 msgid "InvenTree Label Sheet Printer"
 msgstr "庫存樹標籤工作表"
 
-#: plugin/builtin/labels/label_sheet.py:61
+#: plugin/builtin/labels/label_sheet.py:62
 msgid "Arrays multiple labels onto a single sheet"
 msgstr "單張紙上的組合多個標籤"
 
-#: plugin/builtin/labels/label_sheet.py:106
+#: plugin/builtin/labels/label_sheet.py:107
 msgid "Label is too large for page size"
 msgstr "標籤大過頁面"
 
-#: plugin/builtin/labels/label_sheet.py:144
+#: plugin/builtin/labels/label_sheet.py:145
 msgid "No labels were generated"
 msgstr "沒有生成標籤"
 
@@ -6793,7 +6932,7 @@ msgstr "內置插件"
 msgid "Package Plugin"
 msgstr "軟件包插件"
 
-#: plugin/models.py:262 report/models.py:718
+#: plugin/models.py:262
 msgid "Plugin"
 msgstr "插件"
 
@@ -6801,21 +6940,21 @@ msgstr "插件"
 msgid "Method"
 msgstr "方法"
 
-#: plugin/plugin.py:276
+#: plugin/plugin.py:312
 msgid "No author found"
 msgstr "未找到作者"
 
-#: plugin/registry.py:578
+#: plugin/registry.py:591
 #, python-brace-format
 msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}"
 msgstr "插件 '{p}' 與當前 InvenTree 版本{v} 不兼容"
 
-#: plugin/registry.py:581
+#: plugin/registry.py:594
 #, python-brace-format
 msgid "Plugin requires at least version {v}"
 msgstr "插件所需最低版本 {v}"
 
-#: plugin/registry.py:583
+#: plugin/registry.py:596
 #, python-brace-format
 msgid "Plugin requires at most version {v}"
 msgstr "插件所需最高版本 {v}"
@@ -7012,28 +7151,27 @@ msgstr "刪除配置"
 msgid "Delete the plugin configuration from the database"
 msgstr "從數據庫中刪除插件配置"
 
-#: report/api.py:46 report/models.py:682 report/serializers.py:99
-#: report/serializers.py:149
+#: report/api.py:48 report/serializers.py:98 report/serializers.py:148
 msgid "Items"
 msgstr "項目"
 
-#: report/api.py:123
+#: report/api.py:125
 msgid "Plugin not found"
 msgstr "插件未找到"
 
-#: report/api.py:125
+#: report/api.py:127
 msgid "Plugin is not active"
 msgstr "插件未激活"
 
-#: report/api.py:127
+#: report/api.py:129
 msgid "Plugin does not support label printing"
 msgstr "插件不支持標籤打印"
 
-#: report/api.py:176
+#: report/api.py:177
 msgid "Invalid label dimensions"
 msgstr "無效的標籤尺寸"
 
-#: report/api.py:191 report/api.py:269
+#: report/api.py:192 report/api.py:271
 msgid "No valid items provided to template"
 msgstr "沒有有效的項目提供到模板"
 
@@ -7053,172 +7191,136 @@ msgstr "法律"
 msgid "Letter"
 msgstr "字母"
 
-#: report/models.py:141
+#: report/models.py:114
 msgid "Template file with this name already exists"
 msgstr "已存在具有此名稱的模板"
 
-#: report/models.py:173
+#: report/models.py:146
 msgid "Template name"
 msgstr "模版名稱"
 
-#: report/models.py:179
+#: report/models.py:152
 msgid "Template description"
 msgstr "模板説明"
 
-#: report/models.py:185
+#: report/models.py:158
 msgid "Revision number (auto-increments)"
 msgstr "修訂編號 (自動增量)"
 
-#: report/models.py:191
+#: report/models.py:164
 msgid "Attach to Model on Print"
 msgstr "打印時附加到模型"
 
-#: report/models.py:193
+#: report/models.py:166
 msgid "Save report output as an attachment against linked model instance when printing"
 msgstr "打印時將報告輸出保存為附件與鏈接模型實例"
 
-#: report/models.py:233
+#: report/models.py:207
 msgid "Filename Pattern"
 msgstr "文件名樣式"
 
-#: report/models.py:234
+#: report/models.py:208
 msgid "Pattern for generating filenames"
 msgstr "生成文件名模式"
 
-#: report/models.py:239
+#: report/models.py:213
 msgid "Template is enabled"
 msgstr "模板已啓用"
 
-#: report/models.py:245
+#: report/models.py:219
 msgid "Target model type for template"
 msgstr "模版的目標模型類型"
 
-#: report/models.py:265
+#: report/models.py:239
 msgid "Filters"
 msgstr "篩選器"
 
-#: report/models.py:266
+#: report/models.py:240
 msgid "Template query filters (comma-separated list of key=value pairs)"
 msgstr "模版查詢篩選器 (逗號分隔的鍵值對列表)"
 
-#: report/models.py:325 report/models.py:530
+#: report/models.py:299 report/models.py:503
 msgid "Template file"
 msgstr "模板包文件"
 
-#: report/models.py:333
+#: report/models.py:307
 msgid "Page size for PDF reports"
 msgstr "PDF 報告的頁面大小"
 
-#: report/models.py:339
+#: report/models.py:313
 msgid "Render report in landscape orientation"
 msgstr "橫向渲染報告"
 
-#: report/models.py:457
+#: report/models.py:425
 #, python-brace-format
 msgid "Report generated from template {self.name}"
 msgstr ""
 
-#: report/models.py:482
+#: report/models.py:450
 msgid "Error generating report"
 msgstr ""
 
-#: report/models.py:536
+#: report/models.py:509
 msgid "Width [mm]"
 msgstr "寬度 [mm]"
 
-#: report/models.py:537
+#: report/models.py:510
 msgid "Label width, specified in mm"
 msgstr "標籤寬度,以毫米為單位。"
 
-#: report/models.py:543
+#: report/models.py:516
 msgid "Height [mm]"
 msgstr "高度 [mm]"
 
-#: report/models.py:544
+#: report/models.py:517
 msgid "Label height, specified in mm"
 msgstr "標籤高度,以毫米為單位。"
 
-#: report/models.py:652
+#: report/models.py:624
 msgid "Error printing labels"
 msgstr ""
 
-#: report/models.py:682
-msgid "Number of items to process"
-msgstr "要處理的項目數量"
-
-#: report/models.py:688
-msgid "Report generation is complete"
-msgstr "報告生成完成"
-
-#: report/models.py:692
-msgid "Progress"
-msgstr "進度"
-
-#: report/models.py:692
-msgid "Report generation progress"
-msgstr "報告生成進度"
-
-#: report/models.py:700
-msgid "Report Template"
-msgstr "報告模板"
-
-#: report/models.py:707 report/models.py:730
-msgid "Output File"
-msgstr "輸出文件"
-
-#: report/models.py:708 report/models.py:731
-msgid "Generated output file"
-msgstr "生成輸出文件"
-
-#: report/models.py:719
-msgid "Label output plugin"
-msgstr "標籤輸出插件"
-
-#: report/models.py:723
-msgid "Label Template"
-msgstr "標籤模板"
-
-#: report/models.py:746
+#: report/models.py:643
 msgid "Snippet"
 msgstr "代碼片段"
 
-#: report/models.py:747
+#: report/models.py:644
 msgid "Report snippet file"
 msgstr "報告代碼片段文件"
 
-#: report/models.py:754
+#: report/models.py:651
 msgid "Snippet file description"
 msgstr "代碼片段文件描述"
 
-#: report/models.py:772
+#: report/models.py:669
 msgid "Asset"
 msgstr "資產"
 
-#: report/models.py:773
+#: report/models.py:670
 msgid "Report asset file"
 msgstr "報告資產文件"
 
-#: report/models.py:780
+#: report/models.py:677
 msgid "Asset file description"
 msgstr "資產文件描述"
 
-#: report/serializers.py:92
+#: report/serializers.py:91
 msgid "Select report template"
 msgstr "選擇報表模板"
 
-#: report/serializers.py:100 report/serializers.py:150
+#: report/serializers.py:99 report/serializers.py:149
 msgid "List of item primary keys to include in the report"
 msgstr "要包含在報告中的項目主鍵列表"
 
-#: report/serializers.py:133
+#: report/serializers.py:132
 msgid "Select label template"
 msgstr "選擇標籤模板"
 
-#: report/serializers.py:141
+#: report/serializers.py:140
 msgid "Printing Plugin"
 msgstr "打印插件"
 
-#: report/serializers.py:142
+#: report/serializers.py:141
 msgid "Select plugin to use for label printing"
 msgstr "選擇用於標籤打印的插件"
 
@@ -7370,103 +7472,103 @@ msgstr "上級地點"
 msgid "Filter by parent location"
 msgstr "按上級位置篩選"
 
-#: stock/api.py:551
+#: stock/api.py:553
 msgid "Part name (case insensitive)"
 msgstr ""
 
-#: stock/api.py:557
+#: stock/api.py:559
 msgid "Part name contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:563
+#: stock/api.py:565
 msgid "Part name (regex)"
 msgstr ""
 
-#: stock/api.py:568
+#: stock/api.py:570
 msgid "Part IPN (case insensitive)"
 msgstr ""
 
-#: stock/api.py:574
+#: stock/api.py:576
 msgid "Part IPN contains (case insensitive)"
 msgstr ""
 
-#: stock/api.py:580
+#: stock/api.py:582
 msgid "Part IPN (regex)"
 msgstr ""
 
-#: stock/api.py:592
+#: stock/api.py:594
 msgid "Minimum stock"
 msgstr ""
 
-#: stock/api.py:596
+#: stock/api.py:598
 msgid "Maximum stock"
 msgstr ""
 
-#: stock/api.py:599
+#: stock/api.py:601
 msgid "Status Code"
 msgstr "狀態代碼"
 
-#: stock/api.py:639
+#: stock/api.py:641
 msgid "External Location"
 msgstr "外部地點"
 
-#: stock/api.py:738
+#: stock/api.py:740
 msgid "Consumed by Build Order"
 msgstr ""
 
-#: stock/api.py:748
+#: stock/api.py:750
 msgid "Installed in other stock item"
 msgstr ""
 
-#: stock/api.py:837
+#: stock/api.py:839
 msgid "Part Tree"
 msgstr "零件樹"
 
-#: stock/api.py:859
+#: stock/api.py:861
 msgid "Updated before"
 msgstr ""
 
-#: stock/api.py:863
+#: stock/api.py:865
 msgid "Updated after"
 msgstr ""
 
-#: stock/api.py:867
+#: stock/api.py:869
 msgid "Stocktake Before"
 msgstr ""
 
-#: stock/api.py:871
+#: stock/api.py:873
 msgid "Stocktake After"
 msgstr ""
 
-#: stock/api.py:876
+#: stock/api.py:878
 msgid "Expiry date before"
 msgstr "過期日期前"
 
-#: stock/api.py:880
+#: stock/api.py:882
 msgid "Expiry date after"
 msgstr "過期日期後"
 
-#: stock/api.py:883 stock/serializers.py:664
+#: stock/api.py:885 stock/serializers.py:664
 msgid "Stale"
 msgstr "過期"
 
-#: stock/api.py:984
+#: stock/api.py:986
 msgid "Quantity is required"
 msgstr "請先輸入數量"
 
-#: stock/api.py:989
+#: stock/api.py:991
 msgid "Valid part must be supplied"
 msgstr "必須提供有效的零件"
 
-#: stock/api.py:1016
+#: stock/api.py:1018
 msgid "The given supplier part does not exist"
 msgstr "給定的供應商零件不存在"
 
-#: stock/api.py:1026
+#: stock/api.py:1028
 msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
 msgstr "供應商零件有定義的包裝大小,但 use_pack_size 標誌未設置"
 
-#: stock/api.py:1053
+#: stock/api.py:1055
 msgid "Serial numbers cannot be supplied for a non-trackable part"
 msgstr "不能為不可跟蹤的零件提供序列號"
 
@@ -7502,7 +7604,7 @@ msgstr "選擇所有者"
 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations."
 msgstr "庫存項可能不直接位於結構庫存地點,但可能位於其子地點。"
 
-#: stock/models.py:203 users/models.py:938
+#: stock/models.py:203 users/models.py:937
 msgid "External"
 msgstr "外部"
 
@@ -8356,199 +8458,199 @@ msgstr "銷售訂單"
 msgid "Return Orders"
 msgstr "退貨訂單"
 
-#: users/models.py:383
+#: users/models.py:382
 msgid "Permission set"
 msgstr "權限設置"
 
-#: users/models.py:392
+#: users/models.py:391
 msgid "Group"
 msgstr "組"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "View"
 msgstr "查看"
 
-#: users/models.py:396
+#: users/models.py:395
 msgid "Permission to view items"
 msgstr "查看項目的權限"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Add"
 msgstr "添加"
 
-#: users/models.py:400
+#: users/models.py:399
 msgid "Permission to add items"
 msgstr "添加項目的權限"
 
-#: users/models.py:404
+#: users/models.py:403
 msgid "Change"
 msgstr "更改"
 
-#: users/models.py:406
+#: users/models.py:405
 msgid "Permissions to edit items"
 msgstr "編輯項目的權限"
 
-#: users/models.py:410
+#: users/models.py:409
 msgid "Delete"
 msgstr "刪除"
 
-#: users/models.py:412
+#: users/models.py:411
 msgid "Permission to delete items"
 msgstr "刪除項目的權限"
 
-#: users/models.py:936
+#: users/models.py:935
 msgid "Bot"
 msgstr ""
 
-#: users/models.py:937
+#: users/models.py:936
 msgid "Internal"
 msgstr ""
 
-#: users/models.py:939
+#: users/models.py:938
 msgid "Guest"
 msgstr ""
 
-#: users/models.py:948
+#: users/models.py:947
 msgid "Language"
 msgstr ""
 
-#: users/models.py:949
+#: users/models.py:948
 msgid "Preferred language for the user"
 msgstr ""
 
-#: users/models.py:954
+#: users/models.py:953
 msgid "Theme"
 msgstr ""
 
-#: users/models.py:955
+#: users/models.py:954
 msgid "Settings for the web UI as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:960
+#: users/models.py:959
 msgid "Widgets"
 msgstr ""
 
-#: users/models.py:962
+#: users/models.py:961
 msgid "Settings for the dashboard widgets as JSON - do not edit manually!"
 msgstr ""
 
-#: users/models.py:969
+#: users/models.py:968
 msgid "Display Name"
 msgstr ""
 
-#: users/models.py:970
+#: users/models.py:969
 msgid "Chosen display name for the user"
 msgstr ""
 
-#: users/models.py:976
+#: users/models.py:975
 msgid "Position"
 msgstr ""
 
-#: users/models.py:977
+#: users/models.py:976
 msgid "Main job title or position"
 msgstr ""
 
-#: users/models.py:984
+#: users/models.py:983
 msgid "User status message"
 msgstr ""
 
-#: users/models.py:991
+#: users/models.py:990
 msgid "User location information"
 msgstr ""
 
-#: users/models.py:996
+#: users/models.py:995
 msgid "User is actively using the system"
 msgstr ""
 
-#: users/models.py:1003
+#: users/models.py:1002
 msgid "Preferred contact information for the user"
 msgstr ""
 
-#: users/models.py:1009
+#: users/models.py:1008
 msgid "Type"
 msgstr ""
 
-#: users/models.py:1010
+#: users/models.py:1009
 msgid "Which type of user is this?"
 msgstr ""
 
-#: users/models.py:1016
+#: users/models.py:1015
 msgid "Organisation"
 msgstr ""
 
-#: users/models.py:1017
+#: users/models.py:1016
 msgid "Users primary organisation/affiliation"
 msgstr ""
 
-#: users/models.py:1025
+#: users/models.py:1024
 msgid "Primary Group"
 msgstr ""
 
-#: users/models.py:1026
+#: users/models.py:1025
 msgid "Primary group for the user"
 msgstr ""
 
-#: users/serializers.py:202
+#: users/serializers.py:225
 msgid "Username"
 msgstr "用户名"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First Name"
 msgstr "名"
 
-#: users/serializers.py:205
+#: users/serializers.py:228
 msgid "First name of the user"
 msgstr "用户的名字(不包括姓氏)"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last Name"
 msgstr "姓"
 
-#: users/serializers.py:209
+#: users/serializers.py:232
 msgid "Last name of the user"
 msgstr "用户的姓氏"
 
-#: users/serializers.py:213
+#: users/serializers.py:236
 msgid "Email address of the user"
 msgstr "用户的電子郵件地址"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Staff"
 msgstr "職員"
 
-#: users/serializers.py:239
+#: users/serializers.py:262
 msgid "Does this user have staff permissions"
 msgstr "此用户是否擁有員工權限"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Superuser"
 msgstr "超級用户"
 
-#: users/serializers.py:243
+#: users/serializers.py:266
 msgid "Is this user a superuser"
 msgstr "此用户是否為超級用户"
 
-#: users/serializers.py:247
+#: users/serializers.py:270
 msgid "Is this user account active"
 msgstr "此用户帳户是否已激活"
 
-#: users/serializers.py:267
+#: users/serializers.py:290
 msgid "You do not have permission to change this user role."
 msgstr "您沒有更改這個使用者角色的權限"
 
-#: users/serializers.py:305
+#: users/serializers.py:328
 msgid "Only superusers can create new users"
 msgstr "只有管理員帳户可以建立新的使用者"
 
-#: users/serializers.py:325
+#: users/serializers.py:348
 msgid "Your account has been created."
 msgstr "您的帳號已經建立完成。"
 
-#: users/serializers.py:327
+#: users/serializers.py:350
 msgid "Please use the password reset function to login"
 msgstr "請使用重設密碼功能來登入"
 
-#: users/serializers.py:333
+#: users/serializers.py:356
 msgid "Welcome to InvenTree"
 msgstr "歡迎使用 InvenTree"
 
diff --git a/src/frontend/src/locales/ar/messages.po b/src/frontend/src/locales/ar/messages.po
index 82d370117c..0f1908e7f7 100644
--- a/src/frontend/src/locales/ar/messages.po
+++ b/src/frontend/src/locales/ar/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: ar\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Arabic\n"
 "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr ""
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr ""
@@ -196,28 +197,41 @@ msgstr ""
 msgid "Copy"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr ""
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
 msgstr ""
 
 #: src/components/buttons/PrintingActions.tsx:152
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr ""
 
@@ -307,6 +308,41 @@ msgstr ""
 msgid "No"
 msgstr ""
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr ""
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr ""
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr ""
 
@@ -715,7 +751,7 @@ msgstr ""
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr ""
 msgid "A server error occurred"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr ""
 
@@ -904,19 +940,20 @@ msgstr ""
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr ""
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr ""
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr ""
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr ""
@@ -1097,6 +1134,7 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr ""
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr ""
@@ -1231,7 +1269,7 @@ msgstr ""
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr ""
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr "الخيارات"
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr ""
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr ""
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr ""
 
@@ -1783,8 +1821,8 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr ""
 
@@ -1823,7 +1861,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr ""
 
@@ -1854,9 +1892,9 @@ msgstr ""
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr ""
 
@@ -1883,8 +1921,8 @@ msgstr ""
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr ""
 
@@ -1900,12 +1938,12 @@ msgstr ""
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr ""
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr ""
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr ""
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr ""
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr ""
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr ""
 
@@ -2390,7 +2429,7 @@ msgstr ""
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2406,11 +2445,11 @@ msgstr ""
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr ""
@@ -2419,12 +2458,12 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr ""
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr ""
 
@@ -2591,7 +2632,7 @@ msgstr ""
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr ""
 
@@ -2600,7 +2641,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr ""
@@ -2611,10 +2652,10 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr ""
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr "تم تخصيص عناصر المخزون"
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr ""
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr ""
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr ""
 msgid "In Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr ""
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr ""
 
@@ -4354,12 +4424,12 @@ msgstr ""
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr ""
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr ""
@@ -5251,65 +5301,69 @@ msgstr "آخر جلب"
 msgid "Base currency"
 msgstr "العملة الأساسية"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr "حجم الصفحة"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr "أفقي"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr ""
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr ""
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/bg/messages.po b/src/frontend/src/locales/bg/messages.po
index 2ae564243a..2b35564c7b 100644
--- a/src/frontend/src/locales/bg/messages.po
+++ b/src/frontend/src/locales/bg/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: bg\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Bulgarian\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr ""
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr ""
@@ -196,28 +197,41 @@ msgstr ""
 msgid "Copy"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr ""
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
 msgstr ""
 
 #: src/components/buttons/PrintingActions.tsx:152
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr ""
 
@@ -307,6 +308,41 @@ msgstr ""
 msgid "No"
 msgstr ""
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr ""
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr ""
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr ""
 
@@ -715,7 +751,7 @@ msgstr ""
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr ""
 msgid "A server error occurred"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr ""
 
@@ -904,19 +940,20 @@ msgstr ""
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr ""
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr ""
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr ""
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr ""
@@ -1097,6 +1134,7 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr ""
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr ""
@@ -1231,7 +1269,7 @@ msgstr ""
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr ""
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr ""
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr ""
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr ""
 
@@ -1783,8 +1821,8 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr ""
 
@@ -1823,7 +1861,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr ""
 
@@ -1854,9 +1892,9 @@ msgstr ""
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr ""
 
@@ -1883,8 +1921,8 @@ msgstr ""
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr ""
 
@@ -1900,12 +1938,12 @@ msgstr ""
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr ""
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr ""
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr ""
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr ""
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr ""
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr ""
 
@@ -2390,7 +2429,7 @@ msgstr ""
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2406,11 +2445,11 @@ msgstr ""
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr ""
@@ -2419,12 +2458,12 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr ""
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr ""
 
@@ -2591,7 +2632,7 @@ msgstr ""
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr ""
 
@@ -2600,7 +2641,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr ""
@@ -2611,10 +2652,10 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr ""
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr ""
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr ""
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr ""
 msgid "In Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr ""
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr ""
 
@@ -4354,12 +4424,12 @@ msgstr ""
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr ""
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr ""
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr ""
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr ""
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/cs/messages.po b/src/frontend/src/locales/cs/messages.po
index 20ea13942e..6a4e84389e 100644
--- a/src/frontend/src/locales/cs/messages.po
+++ b/src/frontend/src/locales/cs/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: cs\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Czech\n"
 "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr ""
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Odstranit čárový kód"
@@ -196,29 +197,42 @@ msgstr "Zkopírováno"
 msgid "Copy"
 msgstr "Kopírovat"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Tisk štítku"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Tisk reportu"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Tisk štítku"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Tisk reportu"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Tiskové akce"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Tisk štítků"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Tisk reportu"
 
@@ -307,6 +308,41 @@ msgstr "Ano"
 msgid "No"
 msgstr "Ne"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Nízké zásoby"
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Označit jako přečtené"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "Odstranit přidružený obrázek z této položky?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Odstranit"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Vymazat"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Odeslat"
 
@@ -715,7 +751,7 @@ msgstr "Nahrání obrázku se nezdařilo"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr ""
 msgid "A server error occurred"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Chyba formuláře"
 
@@ -904,19 +940,20 @@ msgstr "Chyba formuláře"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Aktualizovat"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Vaše uživatelské jméno"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Heslo"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "Zadejte heslo znova"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "Registrovat"
@@ -1097,6 +1134,7 @@ msgstr "Server"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "Verze rozhraní API"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Pluginy"
@@ -1231,7 +1269,7 @@ msgstr "Hledat"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Načítání"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Akce čárového kódu"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Akce čárového kódu"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Zobrazit čárový kód"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Přiřadit čárový kód"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Odstranit vlastní čárový kód"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Upravit"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Smazat položku"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Duplikovat"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Duplikovat produkt"
 
@@ -1783,8 +1821,8 @@ msgstr "Nastavení systému"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Centrum správce"
 
@@ -1823,7 +1861,7 @@ msgstr "Díly"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "Zásoby"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "Nákup"
 
@@ -1854,9 +1892,9 @@ msgstr "Nákup"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Prodej"
 
@@ -1883,8 +1921,8 @@ msgstr "Skupiny"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Notifikace"
 
@@ -1900,12 +1938,12 @@ msgstr "Navigace"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "O aplikaci"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr "Datum"
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Díl"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "Dodavatel dílu"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr ""
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr "Skladová položka"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "Skladové položky"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "Umístění skladu"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "Firmy"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "Kód projektu"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "Kódy projektu"
 
@@ -2390,7 +2429,7 @@ msgstr ""
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2406,11 +2445,11 @@ msgstr ""
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr ""
@@ -2419,12 +2458,12 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr "Správci"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr ""
 
@@ -2591,7 +2632,7 @@ msgstr "Neaktivní"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr ""
 
@@ -2600,7 +2641,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Sériové číslo"
@@ -2611,10 +2652,10 @@ msgstr "Sériové číslo"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Množství"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr ""
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "Přesunout"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "Přesunout"
 msgid "In Stock"
 msgstr "Na skladě"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Přidat"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Počet"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "Položka vytvořena"
@@ -4289,11 +4351,19 @@ msgstr "Položka vytvořena"
 msgid "Item Updated"
 msgstr "Položka aktualizována"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "Položka odstraněna"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "Nic nevybráno"
 
@@ -4354,12 +4424,12 @@ msgstr "Nic nevybráno"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "Přihlášení"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "Nemáte účet?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "Primární"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "Ověřeno"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "Neověřeno"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "Nastavit jako výchozí"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "Přidat e-mailovou adresu"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "E-mail"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "E-mailová adresa"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Nastavení zobrazení"
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "Vlastní jednotky"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "Parametry dílu"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "Vlastní jednotky"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "Parametry dílu"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr "Parametry kategorie"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,17 +5373,17 @@ msgstr "Stroje"
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr "Pokročilá nastavení"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
+msgstr "Pokročilá nastavení"
+
 #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
-msgstr ""
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
 
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "Čárové kódy"
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "Smazat notifikaci"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "Historie"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "Označit jako nepřečtenou"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Webová stránka"
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr "Datum je v minulosti"
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr "Pro vybraný díl nejsou k dispozici žádné informace o plánování"
 msgid "Expected Quantity"
 msgstr "Očekávané množství"
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Virtuální"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/da/messages.po b/src/frontend/src/locales/da/messages.po
index 17488fd7e2..91bf48b035 100644
--- a/src/frontend/src/locales/da/messages.po
+++ b/src/frontend/src/locales/da/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: da\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Danish\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr ""
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr ""
@@ -196,28 +197,41 @@ msgstr ""
 msgid "Copy"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr ""
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
 msgstr ""
 
 #: src/components/buttons/PrintingActions.tsx:152
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr ""
 
@@ -307,6 +308,41 @@ msgstr ""
 msgid "No"
 msgstr ""
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr ""
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr ""
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr ""
 
@@ -715,7 +751,7 @@ msgstr ""
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr ""
 msgid "A server error occurred"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr ""
 
@@ -904,19 +940,20 @@ msgstr ""
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr ""
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr ""
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr ""
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr ""
@@ -1097,6 +1134,7 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr ""
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr ""
@@ -1231,7 +1269,7 @@ msgstr ""
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr ""
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr ""
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr ""
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr ""
 
@@ -1783,8 +1821,8 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr ""
 
@@ -1823,7 +1861,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr ""
 
@@ -1854,9 +1892,9 @@ msgstr ""
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr ""
 
@@ -1883,8 +1921,8 @@ msgstr ""
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr ""
 
@@ -1900,12 +1938,12 @@ msgstr ""
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr ""
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr ""
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr ""
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr ""
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr ""
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr ""
 
@@ -2390,7 +2429,7 @@ msgstr ""
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2406,11 +2445,11 @@ msgstr ""
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr ""
@@ -2419,12 +2458,12 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr ""
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr ""
 
@@ -2591,7 +2632,7 @@ msgstr ""
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr ""
 
@@ -2600,7 +2641,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr ""
@@ -2611,10 +2652,10 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr ""
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr ""
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr ""
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr ""
 msgid "In Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr ""
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr ""
 
@@ -4354,12 +4424,12 @@ msgstr ""
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr ""
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr ""
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr ""
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr ""
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/de/messages.po b/src/frontend/src/locales/de/messages.po
index 5156d0a3b8..844f752d28 100644
--- a/src/frontend/src/locales/de/messages.po
+++ b/src/frontend/src/locales/de/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: de\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: German\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -94,12 +94,13 @@ msgstr "Barcode-Daten scannen oder eingeben"
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Link"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr "Die Verknüpfung zum zugehörigen Barcode wird entfernt"
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Verknüpfung des Barcodes aufheben"
@@ -196,29 +197,42 @@ msgstr "Kopiert"
 msgid "Copy"
 msgstr "Kopieren"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Etiketten Drucken"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "Drucken"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Bericht drucken"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Etiketten Drucken"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "Drucken"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Bericht drucken"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Druck Aktionen"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Etiketten drucken"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Berichte drucken"
 
@@ -307,6 +308,41 @@ msgstr "Ja"
 msgid "No"
 msgstr "Nein"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr "Überfällig"
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Geringer Bestand"
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Als gelesen markieren"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "Verknüpftes Bild von diesem Teil entfernen?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Entfernen"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Leeren"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Speichern"
 
@@ -715,7 +751,7 @@ msgstr "Das Bild konnte nicht hochgeladen werden"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "Serverfehler"
 msgid "A server error occurred"
 msgstr "Ein Serverfehler ist aufgetreten"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Formularfehler"
 
@@ -904,19 +940,20 @@ msgstr "Formularfehler"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "Fehler für ein oder mehrere Formularfelder vorhanden"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Aktualisieren"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Ihr Benutzername"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Passwort"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "Passwort erneut eingeben"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "Registrieren"
@@ -1097,6 +1134,7 @@ msgstr "Adresse"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "API-Version"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Plugins"
@@ -1231,7 +1269,7 @@ msgstr "Suche"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Wird geladen"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "Importiere Datensätze"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Barcode-Aktionen"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Barcode-Aktionen"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Barcode anzeigen"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Link-Barcode"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr "Einen benutzerdefinierten Barcode mit diesem Artikel verknüpfen"
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Verknüpfung von benutzerdefiniertem Barcode aufheben"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Bearbeiten"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Element löschen"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "Angehalten"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Duplizieren"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Artikel duplizieren"
 
@@ -1783,8 +1821,8 @@ msgstr "Einstellungen"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Adminbereich"
 
@@ -1823,7 +1861,7 @@ msgstr "Teile"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "Lager"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "Einkauf"
 
@@ -1854,9 +1892,9 @@ msgstr "Einkauf"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Verkäufe"
 
@@ -1883,8 +1921,8 @@ msgstr "Gruppen"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Benachrichtigungen"
 
@@ -1900,12 +1938,12 @@ msgstr "Navigation"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "Über uns"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "Alle als gelesen markieren"
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr "Lieferanten"
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr "Hersteller"
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "Kunden"
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr "Datum"
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "Unbekanntes Modell: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Teil"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "Zuliefererteil"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "Zuliefererteile"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr "Herstellerteil"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "Herstellerteile"
 
@@ -2289,9 +2328,9 @@ msgstr "Lagerartikel"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "Lagerartikel"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "Lagerort"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "Unternehmen"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "Projekt-Code"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "Projektnummern"
 
@@ -2390,7 +2429,7 @@ msgstr "Einkaufsbestellung"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "Bestellungen"
 
@@ -2406,11 +2445,11 @@ msgstr "Bestellpositionen"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "Verkaufsauftrag"
@@ -2419,12 +2458,12 @@ msgstr "Verkaufsauftrag"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "Aufträge"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "Versand der Bestellung"
 
@@ -2442,7 +2481,7 @@ msgstr "Rückgabe Auftrag"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "Reklamationen"
 
@@ -2491,7 +2530,11 @@ msgstr "Eigentümer"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr "Label Vorlage"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "Label Vorlagen"
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr "Fehler"
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "Sendung"
 
@@ -2591,7 +2632,7 @@ msgstr "Inaktiv"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "Kein Bestand"
 
@@ -2600,7 +2641,7 @@ msgstr "Kein Bestand"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Seriennummer"
@@ -2611,10 +2652,10 @@ msgstr "Seriennummer"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Anzahl"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr "Losnummer"
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr "Bauprodukt"
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr "Bauprodukt"
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr "Zugewiesen"
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr "Quell Lagerort"
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "Status ändern"
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr "Notiz hinzufügen"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr "Bei bereits vorhandenen Lagerbestand einbuchen"
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr "Losnummer"
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "Seriennummern"
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr "Nächste Seriennummer"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "Angegebene Menge als Packungen anstatt einzelner Artikel hinzufügen"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "Ausgangsmenge für diesen Lagerartikel eingeben"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "Ausgangsmenge für diesen Lagerartikel eingeben"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "Seriennummern für neue Lagerartikel eingeben (oder leer lassen)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr "Lagerbestand Status"
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr "Lagerartikel hinzufügen"
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr "Teil zur Installation auswählen"
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "Lade..."
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr "Zum Standard-Lagerort verschieben"
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "Verschieben"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "Verschieben"
 msgid "In Stock"
 msgstr "Auf Lager"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Hinzufügen"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Anzahl"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr "Bestand hinzufügen"
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr "Bestand entfernen"
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "Bestand verschieben"
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr "Bestand zählen"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr "Bestandsstatus ändern"
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr "Bestand zusammenführen"
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr "Bestand löschen"
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr "Übergeordneter Lagerort"
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr "Zeitüberschreitung"
 msgid "The request timed out"
 msgstr "Bei der Anfrage ist eine Zeitüberschreitung aufgetreten"
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "Element angelegt"
@@ -4289,11 +4351,19 @@ msgstr "Element angelegt"
 msgid "Item Updated"
 msgstr "Eintrag aktualisiert"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "Element gelöscht"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "Sind Sie sicher, dass Sie dieses Element löschen möchten?"
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "Prüfe ob Sie bereits angemeldet sind"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "Keine Auswahl"
 
@@ -4354,12 +4424,12 @@ msgstr "Keine Auswahl"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "Anmelden"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "Nicht registriert?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
 msgid "Single Sign On"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
+msgstr "Nicht aktiviert"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr "Nicht aktiviert"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr "Single Sign On ist für diesen Server nicht aktiviert"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "Die folgenden E-Mail-Adressen sind mit deinem Konto verknüpft:"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "Primär"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "Verifiziert"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "Unbestätigt"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "Primär machen"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr "Senden Sie die Bestätigung erneut"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "Emailadresse hinzufügen"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "E-Mail"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "E-Mail Adresse"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "E-Mail hinzufügen"
 
@@ -5037,76 +5107,76 @@ msgstr "E-Mail hinzufügen"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr "Widerrufen"
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Anzeigeneinstellungen"
@@ -5251,65 +5301,69 @@ msgstr "Letzter Abruf"
 msgid "Base currency"
 msgstr "Basiswährung"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
-msgstr "Hintergrundprozesse"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr "Hintergrundprozesse"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr "Fehlerberichte"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "Währungen"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "Kundenspezifische Einheiten"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "Teile Parameter"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "Kundenspezifische Einheiten"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "Teile Parameter"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr "Kategorie Parameter"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr "Inventur"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,17 +5373,17 @@ msgstr "Maschinen"
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr "Erweiterte Optionen"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
+msgstr "Erweiterte Optionen"
+
 #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
-msgstr ""
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
 
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
@@ -5392,21 +5446,21 @@ msgstr "Externe Plugins sind für diese InvenTree-Installation nicht aktiviert."
 msgid "Plugin Errors"
 msgstr "Plugin-Fehler"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "Barcode"
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr "Berichte"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr "Anzeigeoptionen"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "Benachrichtigungen löschen"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "Verlauf"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "Als ungelesen markieren"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,17 +5701,43 @@ msgstr "Verantwortlich"
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr "Erstellt"
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
+#: src/pages/build/BuildDetail.tsx:196
+#: src/pages/part/PartDetail.tsx:280
+#~ msgid "Unlink custom barcode from part"
+#~ msgstr "Unlink custom barcode from part"
+
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr "Beliebiger Lagerort"
+
+#: src/pages/build/BuildDetail.tsx:202
+#~ msgid "Build Order updated"
+#~ msgstr "Build Order updated"
+
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
+msgstr "Ziel Lagerort"
+
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
+msgstr "Erstellt"
+
+#: src/pages/build/BuildDetail.tsx:221
+#~ msgid "Edit build order"
+#~ msgstr "Edit build order"
+
+#: src/pages/build/BuildDetail.tsx:226
+#~ msgid "Duplicate build order"
+#~ msgstr "Duplicate build order"
+
+#: src/pages/build/BuildDetail.tsx:229
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:255
 #: src/pages/sales/ReturnOrderDetail.tsx:220
 #: src/pages/sales/SalesOrderDetail.tsx:231
@@ -5661,16 +5745,11 @@ msgstr "Erstellt"
 msgid "Start Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:196
-#: src/pages/part/PartDetail.tsx:280
-#~ msgid "Unlink custom barcode from part"
-#~ msgstr "Unlink custom barcode from part"
+#: src/pages/build/BuildDetail.tsx:231
+#~ msgid "Delete build order"
+#~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:202
-#~ msgid "Build Order updated"
-#~ msgstr "Build Order updated"
-
-#: src/pages/build/BuildDetail.tsx:203
+#: src/pages/build/BuildDetail.tsx:237
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:263
 #: src/pages/sales/ReturnOrderDetail.tsx:228
 #: src/pages/sales/SalesOrderDetail.tsx:239
@@ -5681,31 +5760,11 @@ msgstr ""
 msgid "Target Date"
 msgstr "Zieldatum"
 
-#: src/pages/build/BuildDetail.tsx:211
+#: src/pages/build/BuildDetail.tsx:245
 #: src/tables/sales/SalesOrderLineItemTable.tsx:303
 msgid "Completed"
 msgstr "Abgeschlossen"
 
-#: src/pages/build/BuildDetail.tsx:221
-#~ msgid "Edit build order"
-#~ msgstr "Edit build order"
-
-#: src/pages/build/BuildDetail.tsx:226
-#~ msgid "Duplicate build order"
-#~ msgstr "Duplicate build order"
-
-#: src/pages/build/BuildDetail.tsx:231
-#~ msgid "Delete build order"
-#~ msgstr "Delete build order"
-
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
-msgstr "Beliebiger Lagerort"
-
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
-msgstr "Ziel Lagerort"
-
 #: src/pages/build/BuildDetail.tsx:276
 msgid "Build Details"
 msgstr "Bauauftrag Details"
@@ -5727,7 +5786,7 @@ msgstr "Unvollständige Endprodukte"
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr "Bauauftrag bearbeiten"
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr "Neuer Bauauftrag"
 
@@ -5902,6 +5961,20 @@ msgstr "Bauauftrag"
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Webseite"
@@ -5946,7 +6019,7 @@ msgstr "Hersteller"
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr "Verpackungsmenge"
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr "In Bestellung"
 
@@ -6163,8 +6236,8 @@ msgstr "Unterkategorien"
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr "Strukturell"
 
@@ -6182,7 +6255,7 @@ msgstr "Oberste Teile-Kategorie"
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr "Teilekategorie bearbeiten"
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr "Aktion für untergeordnete Kategorien in dieser Kategorie"
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr "Kategorieaktionen"
 
@@ -6226,13 +6300,13 @@ msgstr "Kategorie-Details"
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr "Bauauftragszuweisungen"
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr "Verkaufsauftragszuweisungen"
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr "Version"
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr "Schlüsselwörter"
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr "Verfügbarer Bestand"
@@ -6337,7 +6411,7 @@ msgstr "In Produktion"
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr "Gesperrt"
 
@@ -6381,14 +6455,12 @@ msgstr "Virtuelles Teil"
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr "Erstelldatum"
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr "Erstellt von"
 
@@ -6399,7 +6471,7 @@ msgstr "Standard Zulieferer"
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr "Preisspanne"
 
@@ -6448,7 +6520,7 @@ msgstr "Zugehörige Teile"
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr "Teil bearbeiten"
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr "Teil hinzufügen"
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr "Bestand übertragen"
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr "Bestand bestellen"
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr "Teile-Aktionen"
 
@@ -6555,36 +6627,36 @@ msgstr "Verkaufs Preise"
 msgid "Sale History"
 msgstr "Verkaufshistorie"
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr "Maximum"
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr "Minimum"
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr "Erwartete Menge"
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr "Inventureintrag bearbeiten"
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr "Inventureintrag löschen"
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr "Inventurbericht erstellen"
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr "Inventurbericht geplant"
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr "Neuer Inventurbericht"
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr "Minimaler Wert"
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr "Maximaler Wert"
@@ -6657,7 +6729,7 @@ msgstr "Gesamtpreis"
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "Komponente"
 
@@ -6894,7 +6966,7 @@ msgstr "Herausgabedatum"
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr "Fertigstellungsdatum"
@@ -6935,7 +7007,7 @@ msgstr "Bestellaktionen"
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr "Kundenreferenz"
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr "Bestellung versenden"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr "Versanddatum"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr "Unter-Lagerorte"
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr "Extern"
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr "Lagerort Typ"
 
@@ -7136,7 +7208,7 @@ msgstr "Standardteile"
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr "Lagerort bearbeiten"
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr "Aktion für untergeordnete Lagerorte an diesem Lagerort"
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr "Lagerort Aktionen"
 
@@ -7376,28 +7449,28 @@ msgstr "Spalten auswählen"
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr "Excel (.xlsx)"
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr "Daten herunterladen"
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr "Mir zugewiesene Aufträge anzeigen"
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr "Ausstehend"
 
@@ -7420,10 +7493,6 @@ msgstr "Ausstehend"
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr "Überfällig"
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr "Nach verantwortlichem Besitzer filtern"
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr "Nach Benutzer filtern"
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "Filter entfernen"
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "Filter auswählen"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "Filter"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr "Tabellenfilter"
 
@@ -7633,29 +7707,37 @@ msgstr "Der Server hat einen falschen Datentyp zurückgegeben"
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr "Ausgewählte Datensätze löschen"
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr "Daten aktualisieren"
 
@@ -7677,7 +7759,7 @@ msgstr "Teile-Informationen"
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr "Externer Bestand"
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr "Alternatives Lager einschließen"
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr "Gebäude"
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr "Verbrauchbare Artikel anzeigen"
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr "Hat Preise"
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr "Montage"
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr "Aktive Baugruppen anzeigen"
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr "Nachverfolgbar"
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr "Alternativen einschließen"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr "Optionale Positionen anzeigen"
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr "Unter-Kategorien einschließen"
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr "Unterkategorien in Ergebnissen einbeziehen"
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr "Strukturkategorien anzeigen"
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr "Neue Teilekategorie"
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr "Teilekategorie hinzufügen"
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr "Vorlagen mit Auswahlen anzeigen"
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr "Hat Einheiten"
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr "Mindest-Lagerbestand"
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr "Filtern nach Teil aktiv Status"
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr "Filtern nach Baugruppen Attribut"
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr "Teile in Unterkategorien einschließen"
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr "Nach Teilattributen filtern"
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr "Filtern nach Nachverfolgbarer Eigenschaft"
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr "Nach Teilen mit Einheiten filtern"
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr "Hat IPN"
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr "Nach Teilen filtern, die eine interne Teilenummer haben"
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr "Auf Lager"
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr "Nach Teilen mit Lagerbestand filtern"
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr "Nach Teilen mit geringem Lagerbestand filtern"
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr "Kaufbar"
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr "Nach Teilen filtern, die kaufbar sind"
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr "Verkaufbar"
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr "Nach Teilen filtern, die verkaufbar sind"
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Virtuell"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr "Nach Teilen filtern, die virtuell sind"
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr "Nicht virtuell"
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr "Nach Teilen filtern die eine Vorlage sind"
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr "Aktive Varianten anzeigen"
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr "Vorlage"
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr "Plugin ist nicht installiert"
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr "Plugin"
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr "Bestand bestellen"
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr "Widerrufen"
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr "Fehlerbericht wurde gelöscht"
 msgid "Error Details"
 msgstr "Fehlerdetails"
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr "Modelltyp"
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr "Nach Modelltyp filtern"
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr "Nach aktiviertem Status filtern"
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr "Verfügbare Artikel anzeigen"
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr "Unter-Lagerorte einschließen"
 
@@ -10315,39 +10476,47 @@ msgstr "Nur bestandene Tests anzeigen"
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr "Unterorte in Ergebnissen einbeziehen"
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
-msgstr "Strukturstandorte anzeigen"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
+msgstr "Unterorte in Ergebnissen einbeziehen"
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr "Strukturstandorte anzeigen"
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr "Externe Orte anzeigen"
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr "Hat Standorttyp"
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr "Lagerort hinzufügen"
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr "Hinzugefügt"
diff --git a/src/frontend/src/locales/el/messages.po b/src/frontend/src/locales/el/messages.po
index 50de4c1f99..035253c6ff 100644
--- a/src/frontend/src/locales/el/messages.po
+++ b/src/frontend/src/locales/el/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: el\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Greek\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr ""
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr ""
@@ -196,28 +197,41 @@ msgstr "Αντιγράφηκε"
 msgid "Copy"
 msgstr "Αντιγραφή"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr ""
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
 msgstr ""
 
 #: src/components/buttons/PrintingActions.tsx:152
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr ""
 
@@ -307,6 +308,41 @@ msgstr ""
 msgid "No"
 msgstr ""
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr ""
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr ""
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "Αφαίρεση της σχετικής εικόνας από αυτό το στοιχείο;"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Αφαίρεση"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Εκκαθάριση"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Υποβολή"
 
@@ -715,7 +751,7 @@ msgstr ""
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr ""
 msgid "A server error occurred"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Σφάλμα Φόρμας"
 
@@ -904,19 +940,20 @@ msgstr "Σφάλμα Φόρμας"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Ενημέρωση"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr ""
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr ""
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr ""
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr ""
@@ -1097,6 +1134,7 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr ""
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr ""
@@ -1231,7 +1269,7 @@ msgstr ""
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr ""
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr ""
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr ""
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr ""
 
@@ -1783,8 +1821,8 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr ""
 
@@ -1823,7 +1861,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr ""
 
@@ -1854,9 +1892,9 @@ msgstr ""
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr ""
 
@@ -1883,8 +1921,8 @@ msgstr ""
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr ""
 
@@ -1900,12 +1938,12 @@ msgstr ""
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr ""
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr ""
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr ""
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr ""
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr ""
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr ""
 
@@ -2390,7 +2429,7 @@ msgstr ""
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2406,11 +2445,11 @@ msgstr ""
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr ""
@@ -2419,12 +2458,12 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr ""
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr ""
 
@@ -2591,7 +2632,7 @@ msgstr "Ανενεργό"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr ""
 
@@ -2600,7 +2641,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr ""
@@ -2611,10 +2652,10 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr ""
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr ""
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr ""
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr ""
 msgid "In Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr ""
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr ""
 
@@ -4354,12 +4424,12 @@ msgstr ""
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr ""
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr ""
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr ""
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr ""
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Εικονικό"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/en/messages.po b/src/frontend/src/locales/en/messages.po
index 1e44d155d5..8fe77b8b0a 100644
--- a/src/frontend/src/locales/en/messages.po
+++ b/src/frontend/src/locales/en/messages.po
@@ -89,12 +89,13 @@ msgstr "Scan or enter barcode data"
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -161,7 +162,7 @@ msgstr "Failed to link barcode"
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Link"
 
@@ -170,7 +171,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr "This will remove the link to the associated barcode"
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Unlink Barcode"
@@ -191,29 +192,42 @@ msgstr "Copied"
 msgid "Copy"
 msgstr "Copy"
 
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
+msgstr "Printing Labels"
+
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
+msgstr "Printing Reports"
+
 #: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
-msgstr "Printing"
+#~ msgid "Printing"
+#~ msgstr "Printing"
 
 #: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
-msgstr "Printing completed successfully"
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
 
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Print Label"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr "Printing Labels"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "Print"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr "Printing Reports"
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Print Report"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -227,28 +241,15 @@ msgstr "Printing Reports"
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Print Label"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "Print"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Print Report"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Printing Actions"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Print Labels"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Print Reports"
 
@@ -302,6 +303,41 @@ msgstr "Yes"
 msgid "No"
 msgstr "No"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr "Calendar Filters"
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr "Previous month"
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr "Select month"
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr "Next month"
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr "Download data"
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr "Order Updated"
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr "Error updating order"
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr "Overdue"
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr "No Widgets Selected"
@@ -373,7 +409,7 @@ msgstr "Show the number of part categories which you have subscribed to"
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Low Stock"
 
@@ -540,7 +576,7 @@ msgstr "Change the language of the user interface"
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Mark as read"
 
@@ -592,17 +628,17 @@ msgid "Remove the associated image from this item?"
 msgstr "Remove the associated image from this item?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Remove"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -638,9 +674,9 @@ msgid "Clear"
 msgstr "Clear"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Submit"
 
@@ -710,7 +746,7 @@ msgstr "Image upload failed"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -890,8 +926,8 @@ msgstr "Server Error"
 msgid "A server error occurred"
 msgstr "A server error occurred"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Form Error"
 
@@ -899,19 +935,20 @@ msgstr "Form Error"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "Errors exist for one or more form fields"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Update"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -989,7 +1026,7 @@ msgstr "Your username"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Password"
 
@@ -1064,7 +1101,7 @@ msgid "Repeat password"
 msgstr "Repeat password"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "Register"
@@ -1092,6 +1129,7 @@ msgstr "Host"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1162,7 +1200,7 @@ msgstr "API Version"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Plugins"
@@ -1226,7 +1264,7 @@ msgstr "Search"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Loading"
 
@@ -1420,7 +1458,7 @@ msgid "Importing Records"
 msgstr "Importing Records"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr "Imported Rows"
 
@@ -1428,65 +1466,65 @@ msgstr "Imported Rows"
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr "Options"
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Barcode Actions"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Barcode Actions"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr "View Barcode"
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "View barcode"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Link Barcode"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr "Link a custom barcode to this item"
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Unlink custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Edit"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "Edit item"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Delete item"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "Hold"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Duplicate"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Duplicate item"
 
@@ -1778,8 +1816,8 @@ msgstr "System Settings"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Admin Center"
 
@@ -1818,7 +1856,7 @@ msgstr "Parts"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1830,7 +1868,7 @@ msgstr "Stock"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr "Manufacturing"
 
@@ -1841,7 +1879,7 @@ msgstr "Manufacturing"
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "Purchasing"
 
@@ -1849,9 +1887,9 @@ msgstr "Purchasing"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Sales"
 
@@ -1878,8 +1916,8 @@ msgstr "Groups"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Notifications"
 
@@ -1895,12 +1933,12 @@ msgstr "Navigation"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1911,7 +1949,7 @@ msgid "About"
 msgstr "About"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "Mark all as read"
 
@@ -1947,18 +1985,18 @@ msgstr "Remove search group"
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr "Suppliers"
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr "Manufacturers"
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "Customers"
 
@@ -2053,8 +2091,8 @@ msgstr "Plugin Information"
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2087,12 +2125,13 @@ msgstr "Date"
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2193,24 +2232,24 @@ msgstr "Unknown model: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Part"
@@ -2244,7 +2283,7 @@ msgid "Supplier Part"
 msgstr "Supplier Part"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "Supplier Parts"
 
@@ -2255,7 +2294,7 @@ msgid "Manufacturer Part"
 msgstr "Manufacturer Part"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "Manufacturer Parts"
 
@@ -2284,9 +2323,9 @@ msgstr "Stock Item"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "Stock Items"
@@ -2296,7 +2335,7 @@ msgid "Stock Location"
 msgstr "Stock Location"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2354,7 +2393,7 @@ msgid "Companies"
 msgstr "Companies"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2365,7 +2404,7 @@ msgid "Project Code"
 msgstr "Project Code"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "Project Codes"
 
@@ -2385,7 +2424,7 @@ msgstr "Purchase Order"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "Purchase Orders"
 
@@ -2401,11 +2440,11 @@ msgstr "Purchase Order Lines"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "Sales Order"
@@ -2414,12 +2453,12 @@ msgstr "Sales Order"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "Sales Orders"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "Sales Order Shipment"
 
@@ -2437,7 +2476,7 @@ msgstr "Return Order"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "Return Orders"
 
@@ -2486,7 +2525,11 @@ msgstr "Owners"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2516,8 +2559,7 @@ msgid "Label Template"
 msgstr "Label Template"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "Label Templates"
 
@@ -2526,8 +2568,7 @@ msgid "Report Template"
 msgstr "Report Template"
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr "Report Templates"
 
@@ -2571,7 +2612,7 @@ msgstr "Errors"
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "Shipment"
 
@@ -2586,7 +2627,7 @@ msgstr "Inactive"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "No stock"
 
@@ -2595,7 +2636,7 @@ msgstr "No stock"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Serial Number"
@@ -2606,10 +2647,10 @@ msgstr "Serial Number"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2630,14 +2671,14 @@ msgstr "Quantity"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr "Batch"
@@ -3127,7 +3168,7 @@ msgstr "Please correct the errors in the selected parts"
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr "Order Parts"
@@ -3605,7 +3646,7 @@ msgstr "Build Output"
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3619,7 +3660,7 @@ msgstr "Build Output"
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3667,7 +3708,7 @@ msgstr "Allocated"
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr "Source Location"
 
@@ -3699,8 +3740,8 @@ msgstr "Stock items allocated"
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr "Subscribed"
 
@@ -3774,12 +3815,12 @@ msgid "Set Expiry Date"
 msgstr "Set Expiry Date"
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr "Adjust Packaging"
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "Change Status"
 
@@ -3788,14 +3829,14 @@ msgid "Add Note"
 msgstr "Add Note"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3821,13 +3862,13 @@ msgid "Store with already received stock"
 msgstr "Store with already received stock"
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr "Batch Code"
@@ -3837,7 +3878,7 @@ msgid "Enter batch code for received items"
 msgstr "Enter batch code for received items"
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "Serial Numbers"
 
@@ -3860,7 +3901,7 @@ msgstr "Enter an expiry date for received items"
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3917,60 +3958,60 @@ msgstr "Next serial number"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "Add given quantity as packs instead of individual items"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "Enter initial quantity for this stock item"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "Enter initial quantity for this stock item"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "Enter serial numbers for new stock (or leave blank)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr "Stock Status"
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr "Add Stock Item"
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr "Select the part to install"
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr "Confirm Stock Transfer"
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "Loading..."
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr "Move to default location"
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "Move"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3980,50 +4021,50 @@ msgstr "Move"
 msgid "In Stock"
 msgstr "In Stock"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Add"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Count"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr "Add Stock"
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr "Stock added"
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr "Remove Stock"
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr "Stock removed"
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "Transfer Stock"
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr "Stock transferred"
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4032,44 +4073,44 @@ msgstr "Stock transferred"
 msgid "Count Stock"
 msgstr "Count Stock"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr "Stock counted"
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr "Change Stock Status"
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr "Stock status changed"
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr "Merge Stock"
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr "Stock merged"
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr "Assign Stock to Customer"
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr "Stock assigned to customer"
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr "Delete Stock Items"
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr "Stock deleted"
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr "Parent stock location"
 
@@ -4082,7 +4123,7 @@ msgid "List of entries to choose from"
 msgstr "List of entries to choose from"
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4276,6 +4317,27 @@ msgstr "Timeout"
 msgid "The request timed out"
 msgstr "The request timed out"
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr "Exporting Data"
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr "Export Data"
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr "Export"
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr "Process completed successfully"
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr "Process failed"
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "Item Created"
@@ -4284,11 +4346,19 @@ msgstr "Item Created"
 msgid "Item Updated"
 msgstr "Item Updated"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr "Items Updated"
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr "Update multiple items"
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "Item Deleted"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "Are you sure you want to delete this item?"
 
@@ -4337,7 +4407,7 @@ msgstr "Log off"
 msgid "Checking if you are already logged in"
 msgstr "Checking if you are already logged in"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "No selection"
 
@@ -4349,12 +4419,12 @@ msgstr "No selection"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "Login"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "Don't have an account?"
 
@@ -4367,12 +4437,12 @@ msgid "Multi-Factor Login"
 msgstr "Multi-Factor Login"
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr "TOTP Code"
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr "Enter your TOTP or recovery code"
 
@@ -4865,7 +4935,7 @@ msgid "Position"
 msgstr "Position"
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr "Type"
 
@@ -4922,31 +4992,31 @@ msgstr "One-Time Password"
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr "Enter the TOTP code to ensure it registered correctly"
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr "Email Addresses"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
-msgstr "Email Addresses"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
 msgid "Single Sign On"
 msgstr "Single Sign On"
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
+msgstr "Not enabled"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr "Not enabled"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr "Single Sign On is not enabled for this server"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr "Multi-Factor Authentication"
 
@@ -4954,65 +5024,65 @@ msgstr "Multi-Factor Authentication"
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr "Access Tokens"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr "Error while updating email"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr "Not Configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr "Currently no email addresses are registered."
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "The following email addresses are associated with your account:"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "Primary"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "Verified"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "Unverified"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "Make Primary"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr "Re-send Verification"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "Add Email Address"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "E-Mail"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "E-Mail address"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr "Error while adding email"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "Add Email"
 
@@ -5032,76 +5102,76 @@ msgstr "Add Email"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr "There are no providers connected to this account."
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr "You can sign in to your account using any of the following providers"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr "Remove Provider Link"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr "View"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr "No multi-factor tokens configured for this account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr "Last used at"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr "Created at"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr "Recovery Codes"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr "Unused Codes"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr "Used Codes"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr "Error while registering recovery codes"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr "TOTP"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr "Time-based One-Time Password"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr "One-Time pre-generated recovery codes"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr "Add Token"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr "Register TOTP Token"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr "Error registering TOTP token"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr "Enter your password"
 
@@ -5109,30 +5179,10 @@ msgstr "Enter your password"
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr "Revoke"
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr "Error revoking token"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Display Settings"
@@ -5246,65 +5296,69 @@ msgstr "Last fetched"
 msgid "Base currency"
 msgstr "Base currency"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr "User Management"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr "Data Import"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr "Barcode Scans"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
-msgstr "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
+msgstr "Data Export"
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr "Barcode Scans"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr "Background Tasks"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr "Error Reports"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "Currencies"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr "Custom States"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "Custom Units"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "Part Parameters"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "Custom Units"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "Part Parameters"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr "Category Parameters"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr "Stocktake"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr "Location Types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5314,17 +5368,17 @@ msgstr "Machines"
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr "Advanced Options"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
+msgstr "Advanced Options"
+
 #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
-msgstr "Generated Labels"
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
 
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
@@ -5387,21 +5441,21 @@ msgstr "External plugins are not enabled for this InvenTree installation."
 msgid "Plugin Errors"
 msgstr "Plugin Errors"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr "Page Size"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr "Landscape"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr "Attach to Model"
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr "Generated Reports"
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5482,6 +5536,10 @@ msgstr "All units"
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr "Tokens"
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "Barcodes"
@@ -5512,7 +5570,7 @@ msgid "Reporting"
 msgstr "Reporting"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5551,20 +5609,20 @@ msgstr "Display Options"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "Delete Notifications"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "History"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "Mark as unread"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr "Delete notifications"
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5579,9 +5637,9 @@ msgstr "Delete notifications"
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5638,17 +5696,43 @@ msgstr "Responsible"
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr "Created"
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
+#: src/pages/build/BuildDetail.tsx:196
+#: src/pages/part/PartDetail.tsx:280
+#~ msgid "Unlink custom barcode from part"
+#~ msgstr "Unlink custom barcode from part"
+
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr "Any location"
+
+#: src/pages/build/BuildDetail.tsx:202
+#~ msgid "Build Order updated"
+#~ msgstr "Build Order updated"
+
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
+msgstr "Destination Location"
+
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
+msgstr "Created"
+
+#: src/pages/build/BuildDetail.tsx:221
+#~ msgid "Edit build order"
+#~ msgstr "Edit build order"
+
+#: src/pages/build/BuildDetail.tsx:226
+#~ msgid "Duplicate build order"
+#~ msgstr "Duplicate build order"
+
+#: src/pages/build/BuildDetail.tsx:229
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:255
 #: src/pages/sales/ReturnOrderDetail.tsx:220
 #: src/pages/sales/SalesOrderDetail.tsx:231
@@ -5656,16 +5740,11 @@ msgstr "Created"
 msgid "Start Date"
 msgstr "Start Date"
 
-#: src/pages/build/BuildDetail.tsx:196
-#: src/pages/part/PartDetail.tsx:280
-#~ msgid "Unlink custom barcode from part"
-#~ msgstr "Unlink custom barcode from part"
+#: src/pages/build/BuildDetail.tsx:231
+#~ msgid "Delete build order"
+#~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:202
-#~ msgid "Build Order updated"
-#~ msgstr "Build Order updated"
-
-#: src/pages/build/BuildDetail.tsx:203
+#: src/pages/build/BuildDetail.tsx:237
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:263
 #: src/pages/sales/ReturnOrderDetail.tsx:228
 #: src/pages/sales/SalesOrderDetail.tsx:239
@@ -5676,31 +5755,11 @@ msgstr "Start Date"
 msgid "Target Date"
 msgstr "Target Date"
 
-#: src/pages/build/BuildDetail.tsx:211
+#: src/pages/build/BuildDetail.tsx:245
 #: src/tables/sales/SalesOrderLineItemTable.tsx:303
 msgid "Completed"
 msgstr "Completed"
 
-#: src/pages/build/BuildDetail.tsx:221
-#~ msgid "Edit build order"
-#~ msgstr "Edit build order"
-
-#: src/pages/build/BuildDetail.tsx:226
-#~ msgid "Duplicate build order"
-#~ msgstr "Duplicate build order"
-
-#: src/pages/build/BuildDetail.tsx:231
-#~ msgid "Delete build order"
-#~ msgstr "Delete build order"
-
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
-msgstr "Any location"
-
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
-msgstr "Destination Location"
-
 #: src/pages/build/BuildDetail.tsx:276
 msgid "Build Details"
 msgstr "Build Details"
@@ -5722,7 +5781,7 @@ msgstr "Incomplete Outputs"
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr "Allocated Stock"
 
@@ -5758,8 +5817,8 @@ msgid "Edit Build Order"
 msgstr "Edit Build Order"
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr "Add Build Order"
 
@@ -5897,6 +5956,20 @@ msgstr "Build Order"
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr "Table View"
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr "Calendar View"
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Website"
@@ -5941,7 +6014,7 @@ msgstr "Manufacturer"
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6063,7 +6136,7 @@ msgstr "Pack Quantity"
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr "On Order"
 
@@ -6158,8 +6231,8 @@ msgstr "Subcategories"
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr "Structural"
 
@@ -6177,7 +6250,7 @@ msgstr "Top level part category"
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr "Edit Part Category"
 
@@ -6212,6 +6285,7 @@ msgid "Action for child categories in this category"
 msgstr "Action for child categories in this category"
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr "Category Actions"
 
@@ -6221,13 +6295,13 @@ msgstr "Category Details"
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr "Build Order Allocations"
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr "Sales Order Allocations"
 
@@ -6245,7 +6319,7 @@ msgid "Revision"
 msgstr "Revision"
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6272,7 +6346,7 @@ msgstr "Keywords"
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr "Available Stock"
@@ -6332,7 +6406,7 @@ msgstr "In Production"
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr "Locked"
 
@@ -6376,14 +6450,12 @@ msgstr "Virtual Part"
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr "Creation Date"
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr "Created By"
 
@@ -6394,7 +6466,7 @@ msgstr "Default Supplier"
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr "Price Range"
 
@@ -6443,7 +6515,7 @@ msgstr "Related Parts"
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6460,8 +6532,8 @@ msgid "Edit Part"
 msgstr "Edit Part"
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr "Add Part"
 
@@ -6488,7 +6560,7 @@ msgid "Transfer part stock"
 msgstr "Transfer part stock"
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr "Order"
@@ -6500,7 +6572,7 @@ msgid "Order Stock"
 msgstr "Order Stock"
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr "Part Actions"
 
@@ -6550,36 +6622,36 @@ msgstr "Sale Pricing"
 msgid "Sale History"
 msgstr "Sale History"
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr "Maximum"
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr "Scheduled"
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr "Minimum"
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr "Quantity is speculative"
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr "No date available for provided quantity"
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr "Date is in the past"
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr "Scheduled Quantity"
 
@@ -6595,42 +6667,42 @@ msgstr "There is no scheduling information available for the selected part"
 msgid "Expected Quantity"
 msgstr "Expected Quantity"
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr "Edit Stocktake Entry"
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr "Delete Stocktake Entry"
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr "Generate Stocktake Report"
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr "Stocktake report scheduled"
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr "Stock Value"
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr "New Stocktake Report"
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr "Minimum Value"
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr "Maximum Value"
@@ -6652,7 +6724,7 @@ msgstr "Total Price"
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "Component"
 
@@ -6889,7 +6961,7 @@ msgstr "Issue Date"
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr "Completion Date"
@@ -6930,7 +7002,7 @@ msgstr "Order Actions"
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr "Customer Reference"
@@ -7020,36 +7092,36 @@ msgstr "Complete Sales Order"
 msgid "Ship Order"
 msgstr "Ship Order"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr "Shipment Reference"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr "Allocated Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr "Tracking Number"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr "Invoice Number"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr "Shipment Date"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr "Delivery Date"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr "Shipment Details"
 
@@ -7057,45 +7129,45 @@ msgstr "Shipment Details"
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr "Edit Shipment"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr "Cancel Shipment"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr "Complete Shipment"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr "Pending"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr "Shipped"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr "Delivered"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr "Send Shipment"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr "Shipment Actions"
 
@@ -7108,12 +7180,12 @@ msgid "Sublocations"
 msgstr "Sublocations"
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr "External"
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr "Location Type"
 
@@ -7131,7 +7203,7 @@ msgstr "Default Parts"
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr "Edit Stock Location"
 
@@ -7161,6 +7233,7 @@ msgid "Action for child locations in this location"
 msgstr "Action for child locations in this location"
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr "Location Actions"
 
@@ -7371,28 +7444,28 @@ msgstr "Select Columns"
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr "Excel (.xlsx)"
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr "Download Data"
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7407,7 +7480,7 @@ msgid "Show orders assigned to me"
 msgstr "Show orders assigned to me"
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr "Outstanding"
 
@@ -7415,10 +7488,6 @@ msgstr "Outstanding"
 msgid "Show outstanding items"
 msgstr "Show outstanding items"
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr "Overdue"
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr "Show overdue items"
@@ -7525,6 +7594,7 @@ msgid "Filter by responsible owner"
 msgstr "Filter by responsible owner"
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr "Filter by user"
@@ -7537,6 +7607,10 @@ msgstr "Filter by user who created the order"
 msgid "Filter by user who issued the order"
 msgstr "Filter by user who issued the order"
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr "Filter by part category"
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "Remove filter"
@@ -7555,16 +7629,16 @@ msgstr "Enter filter value"
 msgid "Select date value"
 msgstr "Select date value"
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "Select filter"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "Filter"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr "Table Filters"
 
@@ -7628,29 +7702,37 @@ msgstr "Server returned incorrect data type"
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr "Delete Selected Items"
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr "Are you sure you want to delete the selected items?"
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr "This action cannot be undone"
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr "Items deleted"
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr "Failed to delete items"
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr "Custom table filters are active"
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr "Delete selected records"
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr "Refresh data"
 
@@ -7672,7 +7754,7 @@ msgstr "Part Information"
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr "External stock"
 
@@ -7688,12 +7770,12 @@ msgid "Includes variant stock"
 msgstr "Includes variant stock"
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr "Building"
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7810,7 +7892,7 @@ msgid "Show consumable items"
 msgstr "Show consumable items"
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr "Has Pricing"
 
@@ -7889,7 +7971,7 @@ msgstr "Bill of materials cannot be edited, as the part is locked"
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr "Assembly"
@@ -7899,7 +7981,7 @@ msgid "Show active assemblies"
 msgstr "Show active assemblies"
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr "Trackable"
@@ -7917,21 +7999,21 @@ msgid "Show items allocated to a build output"
 msgstr "Show items allocated to a build output"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr "Include Variants"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr "Include orders for part variants"
@@ -7940,17 +8022,17 @@ msgstr "Include orders for part variants"
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr "Order Status"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr "Allocated Quantity"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr "Available Quantity"
 
@@ -7993,7 +8075,7 @@ msgid "Show optional lines"
 msgstr "Show optional lines"
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr "Testable"
 
@@ -8108,38 +8190,34 @@ msgstr "View Part"
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr "Has Target Date"
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr "Show orders with a target date"
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr "Has Start Date"
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr "Show orders with a start date"
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr "Filter by part category"
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8660,32 +8738,45 @@ msgstr "Required Stock"
 msgid "View Build Order"
 msgstr "View Build Order"
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr "You are subscribed to notifications for this category"
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr "Include Subcategories"
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr "Include subcategories in results"
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr "Show structural categories"
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr "Show categories to which the user is subscribed"
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr "New Part Category"
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr "Set Parent Category"
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr "Set Parent"
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr "Set parent category for the selected items"
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr "Add Part Category"
 
@@ -8748,7 +8839,7 @@ msgid "Show templates with choices"
 msgstr "Show templates with choices"
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr "Has Units"
 
@@ -8790,145 +8881,154 @@ msgstr "Show received items"
 msgid "View Sales Order"
 msgstr "View Sales Order"
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr "Minimum stock"
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr "Filter by part active status"
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr "Filter by part locked status"
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr "Filter by assembly attribute"
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr "Include parts in subcategories"
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr "Filter by component attribute"
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr "Filter by testable attribute"
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr "Filter by trackable attribute"
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr "Filter by parts which have units"
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr "Has IPN"
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr "Filter by parts which have an internal part number"
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr "Has Stock"
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr "Filter by parts which have stock"
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr "Filter by parts which have low stock"
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr "Purchaseable"
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr "Filter by parts which are purchaseable"
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr "Salable"
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr "Filter by parts which are salable"
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Virtual"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr "Filter by parts which are virtual"
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr "Not Virtual"
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr "Is Template"
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr "Filter by parts which are templates"
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr "Is Variant"
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr "Filter by parts which are variants"
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr "Is Revision"
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr "Filter by parts which are revisions"
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr "Has Revisions"
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr "Filter by parts which have revisions"
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr "Filter by parts which have pricing information"
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr "Filter by parts which have available stock"
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr "Filter by parts to which the user is subscribed"
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr "Has Stocktake"
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr "Filter by parts which have stocktake information"
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr "Set Category"
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr "Set category for selected parts"
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr "Order selected parts"
 
@@ -9022,7 +9122,6 @@ msgid "Show active variants"
 msgstr "Show active variants"
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr "Template"
 
@@ -9085,7 +9184,7 @@ msgid "Plugin is not installed"
 msgstr "Plugin is not installed"
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr "Plugin"
 
@@ -9433,37 +9532,45 @@ msgstr "Receive selected items"
 msgid "Receive Item"
 msgstr "Receive Item"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr "Show outstanding allocations"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr "Assigned to Shipment"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr "Show allocations assigned to a shipment"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr "No shipment"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr "Not shipped"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr "Edit Allocation"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr "Delete Allocation"
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr "Assign to Shipment"
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr "Assign to shipment"
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr "Allocate Serial Numbers"
@@ -9501,38 +9608,85 @@ msgstr "Order stock"
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr "Create Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr "Items"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr "View Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr "Edit shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr "Cancel shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr "Add shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr "Show shipments which have been shipped"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr "Show shipments which have been delivered"
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr "Generate Token"
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr "Token generated"
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr "Revoked"
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr "Token"
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr "In Use"
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr "Last Seen"
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr "Expiry"
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr "Show revoked tokens"
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr "Revoke"
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr "Error revoking token"
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr "Tokens are only shown once - make sure to note it down."
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr "Barcode Information"
@@ -9654,6 +9808,14 @@ msgstr "Error report deleted"
 msgid "Error Details"
 msgstr "Error Details"
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr "Output Type"
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr "Exported On"
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9720,7 +9882,7 @@ msgid "Delete Import Session"
 msgstr "Delete Import Session"
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr "Create Import Session"
 
@@ -9728,18 +9890,17 @@ msgstr "Create Import Session"
 msgid "Uploaded"
 msgstr "Uploaded"
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr "Model Type"
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr "Filter by target model type"
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr "Filter by import session status"
 
@@ -9841,8 +10002,8 @@ msgid "Filter by enabled status"
 msgstr "Filter by enabled status"
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr "Report Output"
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10020,7 +10181,7 @@ msgid "Show items which are available"
 msgstr "Show items which are available"
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr "Include Sublocations"
 
@@ -10310,39 +10471,47 @@ msgstr "Show only passed tests"
 msgid "Show results for enabled tests"
 msgstr "Show results for enabled tests"
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr "Include sublocations in results"
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
-msgstr "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
+msgstr "Include sublocations in results"
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr "Show structural locations"
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr "Show external locations"
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr "Has location type"
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr "Filter by location type"
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr "Add Stock Location"
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr "Set Parent Location"
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr "Set parent location for the selected items"
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr "Added"
diff --git a/src/frontend/src/locales/es/messages.po b/src/frontend/src/locales/es/messages.po
index 797990bd8a..f28d8e6910 100644
--- a/src/frontend/src/locales/es/messages.po
+++ b/src/frontend/src/locales/es/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: es\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Spanish\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Enlace"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr "Esto eliminará el enlace al código de barras asociado"
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Desvincular Código de Barras"
@@ -196,29 +197,42 @@ msgstr "Copiado"
 msgid "Copy"
 msgstr "Copiar"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Imprimir etiqueta"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "Imprimir"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Imprimir un informe"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Imprimir etiqueta"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "Imprimir"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Imprimir un informe"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Acciones de impresión"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Imprimir etiquetas"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Imprimir reportes"
 
@@ -307,6 +308,41 @@ msgstr "Sí"
 msgid "No"
 msgstr "No"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr "Vencido"
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr "No hay widgets seleccionados"
@@ -378,7 +414,7 @@ msgstr "Mostrar el número de categorías de piezas a las que se ha suscrito"
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Stock bajo"
 
@@ -545,7 +581,7 @@ msgstr "Cambiar el idioma de la interfaz de usuario"
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Marcar como leído"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "¿Eliminar la imagen asociada de este elemento?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Eliminar"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Borrar"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Enviar"
 
@@ -715,7 +751,7 @@ msgstr "Error al cargar la imagen"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "Error del servidor"
 msgid "A server error occurred"
 msgstr "Ha ocurrido un error con el servidor"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Error de formulario"
 
@@ -904,19 +940,20 @@ msgstr "Error de formulario"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "Existen errores para uno o más campos del formulario"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Actualizar"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Tu nombre de usuario"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Contraseña"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "Repetir contraseña"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "Registro"
@@ -1097,6 +1134,7 @@ msgstr "Servidor"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "Versión API"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Complementos"
@@ -1231,7 +1269,7 @@ msgstr "Buscar"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Cargando"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "Importando "
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr "Opciones"
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Acciones de código de barras"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Acciones de código de barras"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr "Ver código de barras"
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Ver código de barras"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Vincular Código de Barras"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr "Vincular un código de barras personalizado a este elemento"
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Desvincular código de barras personalizado"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Editar"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "Editar elemento"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Eliminar elemento"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "Mantener"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Duplicar"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Duplicar elemento"
 
@@ -1783,8 +1821,8 @@ msgstr "Ajustes del sistema"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Administración"
 
@@ -1823,7 +1861,7 @@ msgstr "Piezas"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "Stock"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr "Fabricación"
 
@@ -1846,7 +1884,7 @@ msgstr "Fabricación"
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "Compras"
 
@@ -1854,9 +1892,9 @@ msgstr "Compras"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Ventas"
 
@@ -1883,8 +1921,8 @@ msgstr "Grupos"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Notificaciones"
 
@@ -1900,12 +1938,12 @@ msgstr "Navegación"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "Acerca de"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "Marcar todos como leídos"
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr "Proveedores"
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr "Fabricantes"
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "Clientes"
 
@@ -2058,8 +2096,8 @@ msgstr "Información del complemento"
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "Modelo desconocido: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Pieza"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "Pieza de proveedor"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "Piezas de proveedor"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr "Pieza de fabricante"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "Piezas del fabricante"
 
@@ -2289,9 +2328,9 @@ msgstr "Artículo de stock"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "Artículos de Stock"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "Ubicación de existencias"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "Empresas"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "Código de proyecto"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "Códigos de proyecto"
 
@@ -2390,7 +2429,7 @@ msgstr "Pedido de compra"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "Pedidos de compra"
 
@@ -2406,11 +2445,11 @@ msgstr "Líneas de pedido de compra"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "Orden de venta"
@@ -2419,12 +2458,12 @@ msgstr "Orden de venta"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "Órdenes de venta"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "Envío de orden de venta"
 
@@ -2442,7 +2481,7 @@ msgstr "Orden de devolución"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "Órdenes de devolución"
 
@@ -2491,7 +2530,11 @@ msgstr "Propietarios"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr "Plantilla de etiqueta"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "Plantillas de etiqueta"
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr "Plantilla de Reporte"
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr "Plantillas de Reportes"
 
@@ -2576,7 +2617,7 @@ msgstr "Errores"
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "Envío"
 
@@ -2591,7 +2632,7 @@ msgstr "Inactivo"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "Sin Stock"
 
@@ -2600,7 +2641,7 @@ msgstr "Sin Stock"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Número de serie"
@@ -2611,10 +2652,10 @@ msgstr "Número de serie"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Cantidad"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr "Ubicación origen"
 
@@ -3704,8 +3745,8 @@ msgstr "Artículos de stock seleccionados"
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr "Suscrito"
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr "Ajustar empaquetado"
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "Cambiar Estado"
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr "Añadir Nota"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr "Guardar con cantidad ya recibida"
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr "Código de lote"
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr "Introduzca el código de lote para los artículos recibidos"
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "Números de serie"
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr "Siguiente número de serie"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "Agrega una cantidad dada en conjunto en lugar de artículos individuales"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "Cantidad inicial de existencias que tendrá este artículo"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "Cantidad inicial de existencias que tendrá este artículo"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "Introduzca números de serie para las nuevas existencias (o deje en blanco)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr "Estado de Existencias"
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr "Añadir artículo de stock"
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr "Selecciona la pieza a instalar"
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr "Confirmar transferencia de existencias"
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "Cargando..."
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr "Mover a la ubicación predeterminada"
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "Mover"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "Mover"
 msgid "In Stock"
 msgstr "Disponible"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Añadir"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Contar"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr "Agregar existencias"
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr "Existencias añadidas"
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr "Eliminar existencias"
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr "Existencias eliminadas"
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "Transferir existencias"
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr "Existencias transferidas"
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr "Existencias transferidas"
 msgid "Count Stock"
 msgstr "Contar existencias"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr "Existencias contadas"
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr "Cambiar estado de existencias"
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr "Estado de existencias cambiado"
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr "Juntar existencias"
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr "Existencias fusionadas"
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr "Asignar existencias a cliente"
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr "Existencias asignadas a cliente"
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr "Eliminar existencias"
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr "Existencias eliminadas"
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr "Ubicación del stock padre"
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr "Lista de entradas entre las que elegir"
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr "Tiempo de espera superado"
 msgid "The request timed out"
 msgstr "La solicitud ha expirado"
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "Elemento creado"
@@ -4289,11 +4351,19 @@ msgstr "Elemento creado"
 msgid "Item Updated"
 msgstr "Elemento actualizado"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "Elemento borrado"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "¿Está seguro de querer borrar este ítem?"
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "Comprobando si ya ha iniciado sesión"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "Ninguna selección"
 
@@ -4354,12 +4424,12 @@ msgstr "Ninguna selección"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "Iniciar sesión"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "¿No tiene una cuenta?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
 msgid "Single Sign On"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
+msgstr "No habilitado"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr "No habilitado"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr "Single Sign On no está habilitado para este servidor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "Las siguientes direcciones de correo electrónico están asociadas con tu cuenta:"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "Principal"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "Verificado"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "Sin verificar"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "Convertir en principal"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr "Reenviar verificación"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "Añadir dirección de correo electrónico"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "Correo electrónico"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "Dirección de correo electrónico"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "Añadir correo electrónico"
 
@@ -5037,76 +5107,76 @@ msgstr "Añadir correo electrónico"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr "Revocar"
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Ajustes de Visualización"
@@ -5251,65 +5301,69 @@ msgstr "Últimas obtenidas"
 msgid "Base currency"
 msgstr "Divisa principal"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr "Importación de datos"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr "Escaneo de códigos de barras"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
-msgstr "Tareas de fondo"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
+msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr "Escaneo de códigos de barras"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr "Tareas de fondo"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr "Informes de Errores"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "Divisas"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr "Estados personalizados"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "Unidades personalizadas"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "Parámetros de Pieza"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "Unidades personalizadas"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "Parámetros de Pieza"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr "Parámetros de categoría"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr "Inventario"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr "Tipos Ubicación"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,17 +5373,17 @@ msgstr "Máquinas"
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr "Opciones Avanzadas"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
+msgstr "Opciones Avanzadas"
+
 #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
-msgstr ""
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
 
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr "Errores de complementos"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr "Tamaño de página"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr "Orientación Horizontal"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr "Adjuntar al modelo"
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr "Todas las unidades"
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "Códigos de barras"
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr "Informes"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr "Opciones de visualización"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "Eliminar notificaciones"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "Historial"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "Marcar como no leído"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr "Borrar notificaciones"
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr "Borrar notificaciones"
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,17 +5701,43 @@ msgstr "Responsable"
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr "Creado"
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
+#: src/pages/build/BuildDetail.tsx:196
+#: src/pages/part/PartDetail.tsx:280
+#~ msgid "Unlink custom barcode from part"
+#~ msgstr "Unlink custom barcode from part"
+
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr "Cualquier ubicación"
+
+#: src/pages/build/BuildDetail.tsx:202
+#~ msgid "Build Order updated"
+#~ msgstr "Build Order updated"
+
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
+msgstr "Ubicación de destino"
+
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
+msgstr "Creado"
+
+#: src/pages/build/BuildDetail.tsx:221
+#~ msgid "Edit build order"
+#~ msgstr "Edit build order"
+
+#: src/pages/build/BuildDetail.tsx:226
+#~ msgid "Duplicate build order"
+#~ msgstr "Duplicate build order"
+
+#: src/pages/build/BuildDetail.tsx:229
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:255
 #: src/pages/sales/ReturnOrderDetail.tsx:220
 #: src/pages/sales/SalesOrderDetail.tsx:231
@@ -5661,16 +5745,11 @@ msgstr "Creado"
 msgid "Start Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:196
-#: src/pages/part/PartDetail.tsx:280
-#~ msgid "Unlink custom barcode from part"
-#~ msgstr "Unlink custom barcode from part"
+#: src/pages/build/BuildDetail.tsx:231
+#~ msgid "Delete build order"
+#~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:202
-#~ msgid "Build Order updated"
-#~ msgstr "Build Order updated"
-
-#: src/pages/build/BuildDetail.tsx:203
+#: src/pages/build/BuildDetail.tsx:237
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:263
 #: src/pages/sales/ReturnOrderDetail.tsx:228
 #: src/pages/sales/SalesOrderDetail.tsx:239
@@ -5681,31 +5760,11 @@ msgstr ""
 msgid "Target Date"
 msgstr "Fecha objetivo"
 
-#: src/pages/build/BuildDetail.tsx:211
+#: src/pages/build/BuildDetail.tsx:245
 #: src/tables/sales/SalesOrderLineItemTable.tsx:303
 msgid "Completed"
 msgstr "Completado"
 
-#: src/pages/build/BuildDetail.tsx:221
-#~ msgid "Edit build order"
-#~ msgstr "Edit build order"
-
-#: src/pages/build/BuildDetail.tsx:226
-#~ msgid "Duplicate build order"
-#~ msgstr "Duplicate build order"
-
-#: src/pages/build/BuildDetail.tsx:231
-#~ msgid "Delete build order"
-#~ msgstr "Delete build order"
-
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
-msgstr "Cualquier ubicación"
-
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
-msgstr "Ubicación de destino"
-
 #: src/pages/build/BuildDetail.tsx:276
 msgid "Build Details"
 msgstr "Detalles de construcción"
@@ -5727,7 +5786,7 @@ msgstr "Salidas incompletas"
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr "Existencias asignadas"
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr "Orden de construcción"
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Sitio Web"
@@ -5946,7 +6019,7 @@ msgstr "Fabricante"
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr "Cantidad del paquete"
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr "En pedido"
 
@@ -6163,8 +6236,8 @@ msgstr "Subcategorías"
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr "Estructural"
 
@@ -6182,7 +6255,7 @@ msgstr "Categoría de piezas de nivel superior"
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr "Editar categoría de pieza"
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr "Acción para subcategorías en esta categoría"
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr "Acciones de categoría"
 
@@ -6226,13 +6300,13 @@ msgstr "Detalles de categoría"
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr "Revisión"
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr "Palabras claves"
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr "Existencias disponibles"
@@ -6337,7 +6411,7 @@ msgstr "En producción"
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr "Bloqueado"
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr "Piezas Relacionadas"
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr "Editar Pieza"
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr "Añadir pieza"
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr "Orden"
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr "Precio de venta"
 msgid "Sale History"
 msgstr "Historial de ventas"
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr "Programado"
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr "La cantidad es especulativa"
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr "No hay fecha disponible para la cantidad proporcionada"
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr "La fecha es en el pasado"
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr "Cantidad programada"
 
@@ -6600,42 +6672,42 @@ msgstr "No hay información de programación disponible para la pieza selecciona
 msgid "Expected Quantity"
 msgstr "Cantidad esperada"
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr "Editar entrada de inventario"
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr "Eliminar entrada de inventario"
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr "Generar el informe de inventario"
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr "Informe de inventario programado"
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr "Nuevo informe de inventario"
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr "Precio total"
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "Componente"
 
@@ -6894,7 +6966,7 @@ msgstr "Fecha de emisión"
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr "Fecha de Finalización"
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr "Completar orden de venta"
 msgid "Ship Order"
 msgstr "Orden de envío"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr "Elementos asignados"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr "Número de Seguimiento"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr "Número de factura"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr "Fecha de Envío"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr "Detalles del envío"
 
@@ -7062,45 +7134,45 @@ msgstr "Detalles del envío"
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr "Cancelar envío"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr "Enviar envío"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr "Acciones de envío"
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr "Sub-localizaciones"
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr "Externo"
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr "Tipo de ubicación"
 
@@ -7136,7 +7208,7 @@ msgstr "Partes por defecto"
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr "Seleccionar columnas"
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr "Excel(.xlsx)"
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr "Descargar datos"
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr "Mostrar pedidos asignados a mí"
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr "Destacado"
 
@@ -7420,10 +7493,6 @@ msgstr "Destacado"
 msgid "Show outstanding items"
 msgstr "Mostrar elementos destacados"
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr "Vencido"
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr "Mostrar artículos vencidos"
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "Eliminar filtro"
@@ -7560,16 +7634,16 @@ msgstr "Introducir valor de filtro"
 msgid "Select date value"
 msgstr "Seleccionar fecha"
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "Seleccionar filtro"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "Filtro"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr "Filtros de tabla"
 
@@ -7633,29 +7707,37 @@ msgstr "El servidor devolvió un tipo de datos incorrecto"
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr "Borrar los elementos seleccionados"
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr "¿Confirma que desea eliminar los elementos seleccionados?"
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr "Esta acción no se puede deshacer"
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr "Los filtros personalizados de tabla están activos"
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr "Eliminar los registros seleccionados"
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr "Refrescar datos"
 
@@ -7677,7 +7759,7 @@ msgstr "Información de la pieza"
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr "Existencias externas"
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr "Incluye existencias variantes"
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr "Incluye pedidos para variantes de piezas"
@@ -7945,17 +8027,17 @@ msgstr "Incluye pedidos para variantes de piezas"
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr "Ver pieza"
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr "Stock requerido"
 msgid "View Build Order"
 msgstr "Ver orden de construcción"
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr "Estás suscrito a las notificaciones de esta categoría"
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr "Incluir subcategorias"
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr "Incluye subcategorías en los resultados"
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr "Mostrar categorías estructurales"
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr "Mostrar categorías a las que el usuario está suscrito"
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr "Nueva categoría de pieza"
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr "Añadir categoría de pieza"
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr "Ver orden de venta"
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr "Incluye piezas en subcategorías"
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Virtual"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr "Recibir artículos seleccionados"
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr "Mostrar asignaciones destacadas"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr "Asignado al envío"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr "Mostrar asignaciones asignadas a un envío"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr "Sin envío"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr "No enviado"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr "Editar Asignación"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr "Borrar asignación"
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr "Asignar Números de Serie"
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr "Ver envío"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr "Editar envío"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr "Cancelar envío"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr "Revocar"
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr "Información de código de barras"
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr "Añadir ubicación de existencias"
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr "Añadido"
diff --git a/src/frontend/src/locales/es_MX/messages.po b/src/frontend/src/locales/es_MX/messages.po
index 60176d4d50..ad66ec754f 100644
--- a/src/frontend/src/locales/es_MX/messages.po
+++ b/src/frontend/src/locales/es_MX/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: es_MX\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Spanish, Mexico\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -94,12 +94,13 @@ msgstr "Escanea o introduce datos de código de barras"
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr "No se pudo vincular el código de barras"
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Enlace"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr "Esto eliminará el enlace al código de barras asociado"
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Desvincular Código de Barras"
@@ -196,29 +197,42 @@ msgstr "Copiado"
 msgid "Copy"
 msgstr "Copiar"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Imprimir etiqueta"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "Imprimir"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Imprimir informe"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Imprimir etiqueta"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "Imprimir"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Imprimir informe"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Acciones de impresión"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Imprimir etiquetas"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Imprimir informes"
 
@@ -307,6 +308,41 @@ msgstr "Sí"
 msgid "No"
 msgstr "No"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr "No hay widgets seleccionados"
@@ -378,7 +414,7 @@ msgstr "Mostrar el número de categorías de piezas a las que se ha suscrito"
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Existencias bajas"
 
@@ -545,7 +581,7 @@ msgstr "Cambiar el idioma de la interfaz de usuario"
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Marcar como leído"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "¿Eliminar imagen asociada al artículo?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Eliminar"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Borrar"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Aceptar"
 
@@ -715,7 +751,7 @@ msgstr "Error al cargar la imagen"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "Error del servidor"
 msgid "A server error occurred"
 msgstr "Ha ocurrido un error con el servidor"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Error de formulario"
 
@@ -904,19 +940,20 @@ msgstr "Error de formulario"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "Existen errores para uno o más campos del formulario"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Actualizar"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Tu nombre de usuario"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Contraseña"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "Repetir contraseña"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "Registro"
@@ -1097,6 +1134,7 @@ msgstr "Servidor"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "Versión de API"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Complementos"
@@ -1231,7 +1269,7 @@ msgstr "Buscar"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Cargando"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "Importando registros"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr "Opciones"
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Acciones de código de barras"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Acciones de código de barras"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr "Ver código de barras"
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Ver código de barras"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Vincular Código de Barras"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr "Vincular un código de barras personalizado a este elemento"
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Desvincular código de barras personalizado"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Editar"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "Editar elemento"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Eliminar elemento"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "Mantener"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Duplicar"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Duplicar elemento"
 
@@ -1783,8 +1821,8 @@ msgstr "Ajustes del sistema"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Centro de administración"
 
@@ -1823,7 +1861,7 @@ msgstr "Piezas"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "Existencias"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr "Fabricación"
 
@@ -1846,7 +1884,7 @@ msgstr "Fabricación"
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "Compras"
 
@@ -1854,9 +1892,9 @@ msgstr "Compras"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Ventas"
 
@@ -1883,8 +1921,8 @@ msgstr "Grupos"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Notificaciones"
 
@@ -1900,12 +1938,12 @@ msgstr "Navegación"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "Acerca de"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "Marcar todos como leídos"
 
@@ -1952,18 +1990,18 @@ msgstr "Eliminar grupo de búsqueda"
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr "Proveedores"
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr "Fabricantes"
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "Clientes"
 
@@ -2058,8 +2096,8 @@ msgstr "Información del complemento"
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr "Fecha"
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "Modelo desconocido: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Pieza"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "Pieza de proveedor"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "Piezas de proveedor"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr "Pieza de fabricante"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "Piezas del fabricante"
 
@@ -2289,9 +2328,9 @@ msgstr "Artículo de stock"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "Artículos de Stock"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "Ubicación de almacén"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "Empresas"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "Código de proyecto"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "Códigos de proyecto"
 
@@ -2390,7 +2429,7 @@ msgstr "Pedido de compra"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "Órdenes de compra"
 
@@ -2406,11 +2445,11 @@ msgstr "Líneas de pedido de compra"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "Orden de venta"
@@ -2419,12 +2458,12 @@ msgstr "Orden de venta"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "Órdenes de venta"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "Envío de orden de venta"
 
@@ -2442,7 +2481,7 @@ msgstr "Orden de devolución"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "Ordenes de devolución"
 
@@ -2491,7 +2530,11 @@ msgstr "Propietarios"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr "Plantilla de etiqueta"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "Plantillas de etiqueta"
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr "Plantilla de informe"
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr "Plantillas de informe"
 
@@ -2576,7 +2617,7 @@ msgstr "Errores"
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "Envío"
 
@@ -2591,7 +2632,7 @@ msgstr "Inactivo"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "Sin existencias"
 
@@ -2600,7 +2641,7 @@ msgstr "Sin existencias"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Número de serie"
@@ -2611,10 +2652,10 @@ msgstr "Número de serie"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Cantidad"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr "Lote"
@@ -3132,7 +3173,7 @@ msgstr "Por favor, corrija los errores en las partes seleccionadas"
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr "Pedir Piezas"
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr "Asignado"
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr "Ubicación origen"
 
@@ -3704,8 +3745,8 @@ msgstr "Artículos de stock seleccionados"
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr "Suscrito"
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr "Establecer la fecha de caducidad"
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr "Ajustar empaquetado"
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "Cambiar Estado"
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr "Añadir Nota"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr "Guardar con cantidad ya recibida"
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr "Código de lote"
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr "Introduzca el código de lote para los artículos recibidos"
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "Números de serie"
 
@@ -3865,7 +3906,7 @@ msgstr "Introduzca una fecha de caducidad para los artículos recibidos"
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr "Siguiente número de serie"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "Agrega una cantidad dada en conjunto en lugar de artículos individuales"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "Cantidad inicial de existencias que tendrá este artículo"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "Cantidad inicial de existencias que tendrá este artículo"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "Introduzca números de serie para las nuevas existencias (o deje en blanco)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr "Estado del stock"
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr "Añadir artículo de stock"
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr "Selecciona la pieza a instalar"
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr "Confirmar transferencia de existencias"
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "Cargando..."
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr "Mover a la ubicación predeterminada"
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "Mover"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "Mover"
 msgid "In Stock"
 msgstr "En Stock"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Agregar"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Contar"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr "Agregar existencias"
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr "Existencias añadidas"
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr "Eliminar existencias"
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr "Existencias eliminadas"
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "Transferir existencias"
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr "Existencias transferidas"
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr "Existencias transferidas"
 msgid "Count Stock"
 msgstr "Contar existencias"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr "Existencias contadas"
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr "Cambiar estado de existencias"
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr "Estado de existencias cambiado"
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr "Juntar existencias"
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr "Existencias fusionadas"
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr "Asignar existencias a cliente"
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr "Existencias asignadas a cliente"
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr "Eliminar existencias"
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr "Existencias eliminadas"
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr "Ubicación del stock padre"
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr "Lista de entradas entre las que elegir"
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr "Tiempo de espera superado"
 msgid "The request timed out"
 msgstr "La solicitud ha expirado"
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "Artículo creado"
@@ -4289,11 +4351,19 @@ msgstr "Artículo creado"
 msgid "Item Updated"
 msgstr "Artículo actualizado"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "Artículo eliminado"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "¿Está seguro de querer eliminar este artículo?"
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "Comprobando si ya ha iniciado sesión"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "Ninguna selección"
 
@@ -4354,12 +4424,12 @@ msgstr "Ninguna selección"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "Ingresar"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "¿No tiene una cuenta?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
 msgid "Single Sign On"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
+msgstr "No habilitado"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr "No habilitado"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr "Single Sign On no está habilitado para este servidor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "Las siguientes direcciones de correo electrónico están asociadas con tu cuenta:"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "Primario"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "Verificado"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "Sin verificar"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "Convertir en principal"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr "Reenviar verificación"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "Añadir dirección de correo electrónico"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "Correo electrónico"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "Dirección de correo electrónico"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "Añadir correo electrónico"
 
@@ -5037,76 +5107,76 @@ msgstr "Añadir correo electrónico"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr "Códigos sin usar"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr "Códigos usados"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr "Error al registrar los códigos de recuperación"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr "Contraseña única temporal"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr "Códigos de recuperación auto-generados de un sólo uso"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr "Añadir Token"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr "Ingrese su contraseña"
 
@@ -5114,30 +5184,10 @@ msgstr "Ingrese su contraseña"
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr "Revocar"
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr "Error al revocar token"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Ajustes de Visualización"
@@ -5251,65 +5301,69 @@ msgstr "Última búsqueda"
 msgid "Base currency"
 msgstr "Divisa principal"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr "Administración de usuarios"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr "Importación de datos"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr "Escaneo de códigos de barras"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
-msgstr "Tareas de fondo"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
+msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr "Escaneo de códigos de barras"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr "Tareas de fondo"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr "Informes de Errores"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "Divisas"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr "Estados personalizados"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "Unidades personalizadas"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "Parámetros de Pieza"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "Unidades personalizadas"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "Parámetros de Pieza"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr "Parámetros de categoría"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr "Inventario"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr "Tipos de Ubicación"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,17 +5373,17 @@ msgstr "Máquinas"
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr "Opciones Avanzadas"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
+msgstr "Opciones Avanzadas"
+
 #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
-msgstr "Etiquetas generadas"
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
 
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
@@ -5392,21 +5446,21 @@ msgstr "Los complementos externos no están habilitados para esta instalación d
 msgid "Plugin Errors"
 msgstr "Errores de complementos"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr "Tamaño de página"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr "Orientación Horizontal"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr "Adjuntar al modelo"
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr "Informes Generados"
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr "Todas las unidades"
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "Códigos de barras"
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr "Informes"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr "Opciones de visualización"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "Eliminar notificaciones"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "Historial"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "Marcar como no leído"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr "Eliminar notificaciones"
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr "Eliminar notificaciones"
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,17 +5701,43 @@ msgstr "Responsable"
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr "Creado"
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
+#: src/pages/build/BuildDetail.tsx:196
+#: src/pages/part/PartDetail.tsx:280
+#~ msgid "Unlink custom barcode from part"
+#~ msgstr "Unlink custom barcode from part"
+
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr "Cualquier ubicación"
+
+#: src/pages/build/BuildDetail.tsx:202
+#~ msgid "Build Order updated"
+#~ msgstr "Build Order updated"
+
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
+msgstr "Ubicación de destino"
+
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
+msgstr "Creado"
+
+#: src/pages/build/BuildDetail.tsx:221
+#~ msgid "Edit build order"
+#~ msgstr "Edit build order"
+
+#: src/pages/build/BuildDetail.tsx:226
+#~ msgid "Duplicate build order"
+#~ msgstr "Duplicate build order"
+
+#: src/pages/build/BuildDetail.tsx:229
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:255
 #: src/pages/sales/ReturnOrderDetail.tsx:220
 #: src/pages/sales/SalesOrderDetail.tsx:231
@@ -5661,16 +5745,11 @@ msgstr "Creado"
 msgid "Start Date"
 msgstr "Fecha de inicio"
 
-#: src/pages/build/BuildDetail.tsx:196
-#: src/pages/part/PartDetail.tsx:280
-#~ msgid "Unlink custom barcode from part"
-#~ msgstr "Unlink custom barcode from part"
+#: src/pages/build/BuildDetail.tsx:231
+#~ msgid "Delete build order"
+#~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:202
-#~ msgid "Build Order updated"
-#~ msgstr "Build Order updated"
-
-#: src/pages/build/BuildDetail.tsx:203
+#: src/pages/build/BuildDetail.tsx:237
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:263
 #: src/pages/sales/ReturnOrderDetail.tsx:228
 #: src/pages/sales/SalesOrderDetail.tsx:239
@@ -5681,31 +5760,11 @@ msgstr "Fecha de inicio"
 msgid "Target Date"
 msgstr "Fecha objetivo"
 
-#: src/pages/build/BuildDetail.tsx:211
+#: src/pages/build/BuildDetail.tsx:245
 #: src/tables/sales/SalesOrderLineItemTable.tsx:303
 msgid "Completed"
 msgstr "Completado"
 
-#: src/pages/build/BuildDetail.tsx:221
-#~ msgid "Edit build order"
-#~ msgstr "Edit build order"
-
-#: src/pages/build/BuildDetail.tsx:226
-#~ msgid "Duplicate build order"
-#~ msgstr "Duplicate build order"
-
-#: src/pages/build/BuildDetail.tsx:231
-#~ msgid "Delete build order"
-#~ msgstr "Delete build order"
-
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
-msgstr "Cualquier ubicación"
-
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
-msgstr "Ubicación de destino"
-
 #: src/pages/build/BuildDetail.tsx:276
 msgid "Build Details"
 msgstr "Detalles de construcción"
@@ -5727,7 +5786,7 @@ msgstr "Salidas incompletas"
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr "Existencias asignadas"
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr "Editar orden de construcción"
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr "Añadir orden de construcción"
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Sitio web"
@@ -5946,7 +6019,7 @@ msgstr "Fabricante"
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr "Cantidad del paquete"
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr "En pedido"
 
@@ -6163,8 +6236,8 @@ msgstr "Subcategorías"
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr "Estructural"
 
@@ -6182,7 +6255,7 @@ msgstr "Categoría de piezas de nivel superior"
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr "Editar categoría de pieza"
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr "Acción para subcategorías en esta categoría"
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr "Acciones de categoría"
 
@@ -6226,13 +6300,13 @@ msgstr "Detalles de categoría"
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr "Revisión"
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr "Palabras claves"
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr "Existencias disponibles"
@@ -6337,7 +6411,7 @@ msgstr "En producción"
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr "Bloqueado"
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr "Fecha de Creación"
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr "Creado Por"
 
@@ -6399,7 +6471,7 @@ msgstr "Proveedor Predeterminado"
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr "Rango de Precios"
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr "Editar Pieza"
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr "Añadir pieza"
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr "Pedido"
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr "Máximo"
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr "Programado"
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr "Mínimo"
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr "La cantidad es especulativa"
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr "No hay fecha disponible para la cantidad proporcionada"
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr "La fecha es en el pasado"
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr "Cantidad programada"
 
@@ -6600,42 +6672,42 @@ msgstr "No hay información de programación disponible para la pieza selecciona
 msgid "Expected Quantity"
 msgstr "Cantidad esperada"
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr "Editar entrada de inventario"
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr "Eliminar entrada de inventario"
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr "Generar el informe de inventario"
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr "Informe de inventario programado"
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr "Nuevo informe de inventario"
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr "Valor Mínimo"
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr "Valor Máximo"
@@ -6657,7 +6729,7 @@ msgstr "Precio total"
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "Componente"
 
@@ -6894,7 +6966,7 @@ msgstr "Fecha de emisión"
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr "Fecha de Finalización"
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr "Artículos asignados"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr "Número de Seguimiento"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr "Número de factura"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr "Detalles del envío"
 
@@ -7062,45 +7134,45 @@ msgstr "Detalles del envío"
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr "Cancelar envío"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr "Enviar envío"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr "Acciones de envío"
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr "Excel(.xlsx)"
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr "Mostrar artículos destacados"
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr "Mostrar artículos vencidos"
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "Eliminar filtro"
@@ -7560,16 +7634,16 @@ msgstr "Introducir valor de filtro"
 msgid "Select date value"
 msgstr "Seleccionar fecha"
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "Seleccionar filtro"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "Filtro"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr "Filtros de tabla"
 
@@ -7633,29 +7707,37 @@ msgstr "El servidor devolvió un tipo de datos incorrecto"
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr "Eliminar Elementos Seleccionados"
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr "Esta acción no se puede deshacer"
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr "Los filtros personalizados de tabla están activos"
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr "Mostrar artículos consumibles"
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr "Tiene Precio"
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr "Rastreable"
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr "Incluye pedidos para variantes de piezas"
@@ -7945,17 +8027,17 @@ msgstr "Incluye pedidos para variantes de piezas"
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr "Ver pieza"
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr "Stock requerido"
 msgid "View Build Order"
 msgstr "Ver orden de construcción"
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr "Estás suscrito a las notificaciones de esta categoría"
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr "Mostrar plantillas con opciones"
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr "Tiene Unidades"
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr "Ver orden de venta"
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr "Stock mínimo"
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr "Tiene IPN"
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Virtual"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr "Ordenar partes seleccionadas"
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr "Recibir elementos seleccionados"
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr "Mostrar asignaciones destacadas"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr "Asignado al envío"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr "Mostrar asignaciones asignadas a un envío"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr "Sin envío"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr "No enviado"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr "Editar Asignación"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr "Eliminar asignación"
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr "Asignar Números de Serie"
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr "Ver envío"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr "Editar envío"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr "Cancelar envío"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr "Revocar"
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr "Error al revocar token"
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr "Información de código de barras"
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr "Mostrar resultados para las pruebas habilitadas"
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/et/messages.po b/src/frontend/src/locales/et/messages.po
index bee506b0de..3f63df5dba 100644
--- a/src/frontend/src/locales/et/messages.po
+++ b/src/frontend/src/locales/et/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: et\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Estonian\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Link"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr "See eemaldab lingi seotud vöötikoodile"
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Linki ribakood"
@@ -196,29 +197,42 @@ msgstr "Kopeeritud"
 msgid "Copy"
 msgstr "Kopeeri"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Prindi silt"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "Prindi"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Prindi aruanne"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Prindi silt"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "Prindi"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Prindi aruanne"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Printimise toimingud"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Prindi sildid"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Prindi aruanded"
 
@@ -307,6 +308,41 @@ msgstr "Jah"
 msgid "No"
 msgstr "Ei"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr "Üle tähtaja"
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr ""
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Märgi loetuks"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "Kas soovite eemaldada seotud pildi sellest üksusest?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Eemalda"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Puhasta"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Esita"
 
@@ -715,7 +751,7 @@ msgstr "Pildi üleslaadimine ebaõnnestus"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "Serveri viga"
 msgid "A server error occurred"
 msgstr "Tekkis serveri viga"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Vormiviga"
 
@@ -904,19 +940,20 @@ msgstr "Vormiviga"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "Ühes või mitmes vormiväljas on vigu"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Värskenda"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Kasutajanimi"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Parool"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "Korrake salasõna"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "Registreeru"
@@ -1097,6 +1134,7 @@ msgstr "Võõrustaja"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "API versioon"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Pluginad"
@@ -1231,7 +1269,7 @@ msgstr "Otsing"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Laadimine"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "Impordime Kirjed"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr "Imporditud read"
 
@@ -1433,65 +1471,65 @@ msgstr "Imporditud read"
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr "Valikud"
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Vöötkoodi Toimingud"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Vöötkoodi Toimingud"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Vaata ribakoodi"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Linki ribakood"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr "Ühendage sellele üksusele kohandatud ribakood"
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Lahutage kohandatud vöötkood"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Muuda"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "Redigeeri ese"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Kustuta üksus"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "Hoidke"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Korduma"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Duplikaadi üksus"
 
@@ -1783,8 +1821,8 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr ""
 
@@ -1823,7 +1861,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr "Tootmine"
 
@@ -1846,7 +1884,7 @@ msgstr "Tootmine"
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "Ostmine"
 
@@ -1854,9 +1892,9 @@ msgstr "Ostmine"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Müük"
 
@@ -1883,8 +1921,8 @@ msgstr "Rühmad"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Teavitused"
 
@@ -1900,12 +1938,12 @@ msgstr "Navigeerimine"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "Teave"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "Märgi kõik loetuks"
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr "Tarnijaid"
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "Kliendid"
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr "Kuupäev"
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr ""
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr ""
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr ""
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr ""
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr ""
 
@@ -2390,7 +2429,7 @@ msgstr ""
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2406,11 +2445,11 @@ msgstr ""
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr ""
@@ -2419,12 +2458,12 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr "Omanikud"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr ""
 
@@ -2591,7 +2632,7 @@ msgstr "Mitteaktiivne"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr ""
 
@@ -2600,7 +2641,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Seerianumber"
@@ -2611,10 +2652,10 @@ msgstr "Seerianumber"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Kogus"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr "Eraldatud"
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr "Selle plugina jaoks ei ole sisu esitatud"
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "Muuda staatust"
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr "Lisa märkus"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr "Pood juba saadud varudega"
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr ""
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "Lisage antud kogus pakkidena individuaalsete esemete asemel"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "Sisestage sellele laoseadmele algkogus"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "Sisestage sellele laoseadmele algkogus"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "Sisestage uued kaubanduslikud numbrikoodid (või jätke tühjaks)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr "Laoseis"
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "Laadimine..."
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "Liiguta"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "Liiguta"
 msgid "In Stock"
 msgstr "Laos"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Lisa"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Kogus"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr "Aegumine"
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "Kas olete kindel, et soovite selle üksuse kustutada?"
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "Kontrollige, kas olete juba sisse logitud"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr ""
 
@@ -4354,12 +4424,12 @@ msgstr ""
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "Logi sisse"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "Kas teil pole kontot?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr "Sisselogimine pole sellele serverile lubatud"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "Teie kontoga on seotud järgmised e-posti aadressid:"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "Peamine"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "Kinnitatud"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "Kinnitamata"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "Määra peamiseks"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr "Saada kinnitus uuesti"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "Lisa e-posti aadress"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "E-post"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "E-posti aadress"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "Lisa E-mail"
 
@@ -5037,76 +5107,76 @@ msgstr "Lisa E-mail"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr "Tühista"
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Vaate seaded"
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr "Baasvaluuta"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr "Andmete importimine"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
-msgstr "Taustaülesanded"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr "Taustaülesanded"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr "Veateated"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "Valuutad"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr "Kohandatud staatused"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr "Masinad"
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr "Välised pistikprogrammid ei ole selle InvenTree installatsiooni jaoks l
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr "Lehe suurus"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr "Horisontaalne"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr "Lisa mudelile"
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr "Kõik üksused"
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr "Aruanded"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr "Kuvamise valikud"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "Kustuta teavitused"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "Ajalugu"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "Märgi mitteloetuks"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Veebileht"
@@ -5946,7 +6019,7 @@ msgstr "Tootja"
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr "Kogus pakis"
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr "Alamkategooriad"
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr "Ülemine osakategooria"
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr "Muuda osa kategooriat"
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr "Tegevus selle kategooria alamkategooriate jaoks"
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr "Tellimuse koostamise eraldised"
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr "Müügitellimuste eraldamine"
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr "Märksõnad"
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr "Saadaval laos"
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr "Vaiketarnija"
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr "Hinnavahemik"
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr "Muuda osa"
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr "Lisa osa"
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr "Maksimum"
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr "Miinimum"
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr "Minimaalne väärtus"
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr "Maksimaalne hind"
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "Komponent"
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr "Saadetise viide"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr "Väline"
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr "Tegevus selle asukoha alamkohtades"
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr "Vali veerud"
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr "Excel (.xlsx)"
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr "Laadi andmed alla"
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr "Näita mulle minule määratud tellimusi"
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr "Ootel"
 
@@ -7420,10 +7493,6 @@ msgstr "Ootel"
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr "Üle tähtaja"
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr "Filtreerige vastutava omaniku järgi"
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr "Filtreeri kasutaja järgi"
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "Eemalda filter"
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "Vali filter"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "Filter"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr "Tabeli filtrid"
 
@@ -7633,29 +7707,37 @@ msgstr "Server tagastas ebatäpse andmeühiku"
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr "Kustutage valitud kirjed"
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr "Kas olete kindel, et soovite kustutada valitud elemendid?"
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr "Kustutage valitud kirjed"
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr "Tükkide loendit ei saa redigeerida, kuna osa on lukustatud"
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr "Jälgitav"
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr "Näita esemete eraldatud ehituse väljundit"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr "Kaasake alamkategooriad tulemustesse"
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr "Näita struktuurikategooriaid"
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr "Näita kategooriaid, millele kasutaja on tellinud"
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr "Kuva valikuga mallid"
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr "Filtreeri osa aktiivse staatuse järgi"
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr "Filtreeri vastavalt osa lukustatud seisundile"
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr "Filtreeri koostise atribuudi järgi"
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr "Kaasa osad alamkategooriatesse"
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr "Filtreeri komponendi atribuudi järgi"
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr "Filtreeri testitava atribuudi järgi"
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr "Filtreerige jälgitava atribuudi järgi"
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr "Filtreeri osade järgi, millel on ühikud"
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr "Filtreeri osade järgi, millel on siseosade number"
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr "Filtreeri osade järgi, millel on laoseis"
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr "Filtreeri osade järgi, millel on vähe laoseisu"
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr "Filtreeri osade järgi, mis on ostetavad"
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr "Filtreeri osade järgi, mis on müügiloaga"
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr "Filtreeri osade järgi, mis on virtuaalsed"
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr "Filtreeri osade järgi, mis on mallid"
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr "Filtreeri osade järgi, mis on revisioonid"
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr "Filtreeri osade järgi, millel on revisioonid"
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr "Filtreeri osade järgi, millel on hinnateave"
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr "Filtreeri osade järgi, millel on laoseis saadaval"
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr "Filtreeri osade järgi, millele kasutaja on tellinud"
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr "Filtreeri osade järgi, millel on inventuuriteave"
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr "Plugin"
 
@@ -9438,37 +9537,45 @@ msgstr "Võta vastu valitud üksused"
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr "Määra seerianumbrid"
@@ -9506,38 +9613,85 @@ msgstr "Tellige varu"
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr "Näita saadetisi, mis on laevatatud"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr "Näita saadetisi, mis on kätte toimetatud"
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr "Tühista"
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr "Kustuta importimise sessioon"
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr "Loo importimise sessioon"
 
@@ -9733,18 +9895,17 @@ msgstr "Loo importimise sessioon"
 msgid "Uploaded"
 msgstr "Üles laaditud"
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr "Filtri sihtmodeli tüübi järgi"
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr "Filtreeri impordi seansi oleku järgi"
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr "Näita esemeid, millel on saadaval"
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr "Näita ainult läbitud teste"
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr "Kaasake alamkohad tulemustesse"
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
-msgstr "Näita struktuurseid asukohti"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
+msgstr "Kaasake alamkohad tulemustesse"
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr "Näita struktuurseid asukohti"
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr "Näita väliseid asukohti"
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr "Omab asukoha tüüpi"
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr "Filtreeri asukoha tüübi järgi"
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr "Lisa varude asukoht"
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr "Lisatud"
diff --git a/src/frontend/src/locales/fa/messages.po b/src/frontend/src/locales/fa/messages.po
index a73135c0ff..3de56f62fa 100644
--- a/src/frontend/src/locales/fa/messages.po
+++ b/src/frontend/src/locales/fa/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: fa\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Persian\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr ""
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr ""
@@ -196,28 +197,41 @@ msgstr ""
 msgid "Copy"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr ""
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
 msgstr ""
 
 #: src/components/buttons/PrintingActions.tsx:152
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr ""
 
@@ -307,6 +308,41 @@ msgstr ""
 msgid "No"
 msgstr ""
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr ""
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr ""
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr ""
 
@@ -715,7 +751,7 @@ msgstr ""
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr ""
 msgid "A server error occurred"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr ""
 
@@ -904,19 +940,20 @@ msgstr ""
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr ""
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr ""
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr ""
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr ""
@@ -1097,6 +1134,7 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr ""
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr ""
@@ -1231,7 +1269,7 @@ msgstr ""
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr ""
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr ""
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr ""
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr ""
 
@@ -1783,8 +1821,8 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr ""
 
@@ -1823,7 +1861,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr ""
 
@@ -1854,9 +1892,9 @@ msgstr ""
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr ""
 
@@ -1883,8 +1921,8 @@ msgstr ""
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr ""
 
@@ -1900,12 +1938,12 @@ msgstr ""
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr ""
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr ""
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr ""
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr ""
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr ""
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr ""
 
@@ -2390,7 +2429,7 @@ msgstr ""
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2406,11 +2445,11 @@ msgstr ""
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr ""
@@ -2419,12 +2458,12 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr ""
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr ""
 
@@ -2591,7 +2632,7 @@ msgstr ""
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr ""
 
@@ -2600,7 +2641,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr ""
@@ -2611,10 +2652,10 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr ""
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr ""
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr ""
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr ""
 msgid "In Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr ""
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr ""
 
@@ -4354,12 +4424,12 @@ msgstr ""
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr ""
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr ""
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr ""
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr ""
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/fi/messages.po b/src/frontend/src/locales/fi/messages.po
index f24ac47a6c..a5fbbbdb54 100644
--- a/src/frontend/src/locales/fi/messages.po
+++ b/src/frontend/src/locales/fi/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: fi\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Finnish\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr ""
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr ""
@@ -196,28 +197,41 @@ msgstr ""
 msgid "Copy"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr ""
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
 msgstr ""
 
 #: src/components/buttons/PrintingActions.tsx:152
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr ""
 
@@ -307,6 +308,41 @@ msgstr ""
 msgid "No"
 msgstr ""
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr ""
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr ""
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr ""
 
@@ -715,7 +751,7 @@ msgstr ""
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr ""
 msgid "A server error occurred"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr ""
 
@@ -904,19 +940,20 @@ msgstr ""
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr ""
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr ""
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr ""
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr ""
@@ -1097,6 +1134,7 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr ""
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr ""
@@ -1231,7 +1269,7 @@ msgstr ""
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr ""
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr ""
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr ""
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr ""
 
@@ -1783,8 +1821,8 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr ""
 
@@ -1823,7 +1861,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr ""
 
@@ -1854,9 +1892,9 @@ msgstr ""
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr ""
 
@@ -1883,8 +1921,8 @@ msgstr ""
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr ""
 
@@ -1900,12 +1938,12 @@ msgstr ""
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr ""
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr ""
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr ""
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr ""
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr ""
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr ""
 
@@ -2390,7 +2429,7 @@ msgstr ""
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2406,11 +2445,11 @@ msgstr ""
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr ""
@@ -2419,12 +2458,12 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr ""
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr ""
 
@@ -2591,7 +2632,7 @@ msgstr ""
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr ""
 
@@ -2600,7 +2641,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr ""
@@ -2611,10 +2652,10 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr ""
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr ""
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr ""
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr ""
 msgid "In Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr ""
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr ""
 
@@ -4354,12 +4424,12 @@ msgstr ""
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr ""
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr ""
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr ""
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr ""
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/fr/messages.po b/src/frontend/src/locales/fr/messages.po
index 4aaf70df4b..5df56ac82d 100644
--- a/src/frontend/src/locales/fr/messages.po
+++ b/src/frontend/src/locales/fr/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: fr\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: French\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Lien"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr "Ceci supprimera le lien vers le code-barres associé"
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Délier le code-barre"
@@ -196,29 +197,42 @@ msgstr "Copié"
 msgid "Copy"
 msgstr "Copier"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Imprimer l'étiquette"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "Imprimer"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Imprimer le rapport"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Imprimer l'étiquette"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "Imprimer"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Imprimer le rapport"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Options d'impression"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Imprimer les étiquettes"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Imprimer les rapports"
 
@@ -307,6 +308,41 @@ msgstr "Oui"
 msgid "No"
 msgstr "Non"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr "En retard"
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr "Aucun gadget sélectionné"
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Stock faible"
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Marqué comme lu"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "Supprimer l'image associée de cet élément ?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Supprimer"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Effacer"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Envoyer"
 
@@ -715,7 +751,7 @@ msgstr "Le téléchargement de l'image a échoué"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "Erreur serveur"
 msgid "A server error occurred"
 msgstr "Une erreur serveur s'est produite"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Erreur de formulaire"
 
@@ -904,19 +940,20 @@ msgstr "Erreur de formulaire"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "Il existe des erreurs pour un ou plusieurs champs du formulaire"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Mise à jour"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Votre nom d'utilisateur"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Mot de passe"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "Répéter le mot de passe"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "S'enregistrer"
@@ -1097,6 +1134,7 @@ msgstr "Serveur"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "Version de l'API"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Extensions"
@@ -1231,7 +1269,7 @@ msgstr "Rechercher"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Chargement"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "Importation des enregistrements"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr "Lignes importées"
 
@@ -1433,65 +1471,65 @@ msgstr "Lignes importées"
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr "Options"
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Actions de code-barres"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Actions de code-barres"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Voir le code-barre"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Lier le code-barre"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr "Lier un code-barres personnalisé à cet article"
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Délier le code-barres personnalisé"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Éditer"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "Modifier l’article"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Supprimer l’article"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "Mis en attente"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Dupliquer"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Dupliquer l'article"
 
@@ -1783,8 +1821,8 @@ msgstr "Les paramètres du système"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Centre Admin"
 
@@ -1823,7 +1861,7 @@ msgstr "Composants"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "Stock"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "Achat en cours"
 
@@ -1854,9 +1892,9 @@ msgstr "Achat en cours"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Ventes"
 
@@ -1883,8 +1921,8 @@ msgstr "Groupes"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Notifications"
 
@@ -1900,12 +1938,12 @@ msgstr "Navigation"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "À propos"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "Marquer tous comme lu"
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr "Fournisseurs"
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "Clients"
 
@@ -2058,8 +2096,8 @@ msgstr "Informations sur le plugin"
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr "Date"
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "Modèle inconnu : {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Pièce"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "Pièce fournisseur"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "Pièces du fournisseur"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr "Pièces du fabricant"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "Pièces du fabricant"
 
@@ -2289,9 +2328,9 @@ msgstr "Article en stock"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "Articles en stock"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "Emplacement du stock"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "Sociétés"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "Code du projet"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "Codes du projet"
 
@@ -2390,7 +2429,7 @@ msgstr "Commande d’achat"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "Ordres d'achat"
 
@@ -2406,11 +2445,11 @@ msgstr "Lignes de commande d'achat"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "Ventes"
@@ -2419,12 +2458,12 @@ msgstr "Ventes"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "Ordres de vente"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "Expédition de la commande"
 
@@ -2442,7 +2481,7 @@ msgstr "Retour de commande"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "Retours"
 
@@ -2491,7 +2530,11 @@ msgstr "Propriétaires"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr "Modèle d'étiquette"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "Modèles d'étiquettes"
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr "Modèle de rapport"
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr "Modèles des rapports"
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "Livraison"
 
@@ -2591,7 +2632,7 @@ msgstr "Inactif"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "Aucun stock"
 
@@ -2600,7 +2641,7 @@ msgstr "Aucun stock"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Numéro de série"
@@ -2611,10 +2652,10 @@ msgstr "Numéro de série"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Quantité"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr "Allouée"
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr "Emplacement d'origine"
 
@@ -3704,8 +3745,8 @@ msgstr "Éléments du stock alloués"
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr "Ajuster le conditionnement"
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "Changer le statut"
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr "Ajouter une note"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr "Stocker avec le stock déjà reçu"
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr "Barre-code"
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "Numéros de Série"
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr "Numéro de série suivant"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "Ajouter une quantité en paquet au lieu de pièces individuelles"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "Entrez la quantité initiale pour cet article en stock"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "Entrez la quantité initiale pour cet article en stock"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "Entrez les numéros de série pour le nouveau stock (ou laisser vide)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr "État du stock"
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr "Ajouter un article en stock"
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr "Sélectionnez la partie à installer"
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "Chargement..."
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr "Déplacer vers l'emplacement par défaut"
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "Déplacer"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "Déplacer"
 msgid "In Stock"
 msgstr "En Stock"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Ajouter"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Compter"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr "Ajouter du stock"
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr "Supprimer du stock"
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "Transférer le stock"
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr "Compter le stock"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr "Changer l'état du stock"
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr "Fusionner le stock"
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr "Supprimer l'article du stock"
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr "Localisation Parente du stock"
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr "Temps d'attente dépassé"
 msgid "The request timed out"
 msgstr "La requête a expiré"
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "Élément créé"
@@ -4289,11 +4351,19 @@ msgstr "Élément créé"
 msgid "Item Updated"
 msgstr "Élément mis à jour"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "Élément supprimé"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "Êtes-vous certain de vouloir supprimer cet élément?"
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "Vérifier si vous êtes déjà connecté"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "Aucune sélection"
 
@@ -4354,12 +4424,12 @@ msgstr "Aucune sélection"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "Se connecter"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "Pas encore de compte ?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
 msgid "Single Sign On"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
+msgstr "Non activé"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr "Non activé"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr "L'authentification unique n'est pas activée pour ce serveur"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "Les adresses de messagerie suivantes sont associées à votre compte :"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "Principale"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "Vérifiée"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "Non vérifiée"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "Rendre Principale"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr "Renvoyer le message de vérification"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "Ajouter une adresse email"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "E-mail"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "Adresse e-mail"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "Ajouter l’e-mail"
 
@@ -5037,76 +5107,76 @@ msgstr "Ajouter l’e-mail"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr "Révoquer"
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Paramètres d'Affichage"
@@ -5251,65 +5301,69 @@ msgstr "Dernière récupération"
 msgid "Base currency"
 msgstr "Devise par défaut"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr "Importation de données"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr "Scans de code-barres"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
-msgstr "Tâches en arrière plan"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
+msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr "Scans de code-barres"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr "Tâches en arrière plan"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr "Rapports d'erreur"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "Devise"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr "Statut personnalisé"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "Unités personnalisées"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "Paramètres de la pièce"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "Unités personnalisées"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "Paramètres de la pièce"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr "Paramètres de catégorie"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr "Prise d'inventaire"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr "Types d'emplacement"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,17 +5373,17 @@ msgstr "Équipements"
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr "Options avancées"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
+msgstr "Options avancées"
+
 #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
-msgstr ""
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
 
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
@@ -5392,21 +5446,21 @@ msgstr "Les extensions tierces ne sont pas activées pour cette installation d'I
 msgid "Plugin Errors"
 msgstr "Erreurs du plugin"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr "Taille de la page"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr "Paysage"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr "Joindre au modèle"
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr "Toutes les unités"
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "Code-barres"
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr "Rapports"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr "Options d’affichage"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "Supprimer les notifications"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "Historique"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "Marquer comme non lu"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,17 +5701,43 @@ msgstr "Responsable"
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr "Créé"
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
+#: src/pages/build/BuildDetail.tsx:196
+#: src/pages/part/PartDetail.tsx:280
+#~ msgid "Unlink custom barcode from part"
+#~ msgstr "Unlink custom barcode from part"
+
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr "Tous les emplacements"
+
+#: src/pages/build/BuildDetail.tsx:202
+#~ msgid "Build Order updated"
+#~ msgstr "Build Order updated"
+
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
+msgstr "Emplacement cible"
+
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
+msgstr "Créé"
+
+#: src/pages/build/BuildDetail.tsx:221
+#~ msgid "Edit build order"
+#~ msgstr "Edit build order"
+
+#: src/pages/build/BuildDetail.tsx:226
+#~ msgid "Duplicate build order"
+#~ msgstr "Duplicate build order"
+
+#: src/pages/build/BuildDetail.tsx:229
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:255
 #: src/pages/sales/ReturnOrderDetail.tsx:220
 #: src/pages/sales/SalesOrderDetail.tsx:231
@@ -5661,16 +5745,11 @@ msgstr "Créé"
 msgid "Start Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:196
-#: src/pages/part/PartDetail.tsx:280
-#~ msgid "Unlink custom barcode from part"
-#~ msgstr "Unlink custom barcode from part"
+#: src/pages/build/BuildDetail.tsx:231
+#~ msgid "Delete build order"
+#~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:202
-#~ msgid "Build Order updated"
-#~ msgstr "Build Order updated"
-
-#: src/pages/build/BuildDetail.tsx:203
+#: src/pages/build/BuildDetail.tsx:237
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:263
 #: src/pages/sales/ReturnOrderDetail.tsx:228
 #: src/pages/sales/SalesOrderDetail.tsx:239
@@ -5681,31 +5760,11 @@ msgstr ""
 msgid "Target Date"
 msgstr "Date cible"
 
-#: src/pages/build/BuildDetail.tsx:211
+#: src/pages/build/BuildDetail.tsx:245
 #: src/tables/sales/SalesOrderLineItemTable.tsx:303
 msgid "Completed"
 msgstr "Complété"
 
-#: src/pages/build/BuildDetail.tsx:221
-#~ msgid "Edit build order"
-#~ msgstr "Edit build order"
-
-#: src/pages/build/BuildDetail.tsx:226
-#~ msgid "Duplicate build order"
-#~ msgstr "Duplicate build order"
-
-#: src/pages/build/BuildDetail.tsx:231
-#~ msgid "Delete build order"
-#~ msgstr "Delete build order"
-
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
-msgstr "Tous les emplacements"
-
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
-msgstr "Emplacement cible"
-
 #: src/pages/build/BuildDetail.tsx:276
 msgid "Build Details"
 msgstr "Détails de fabrication"
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr "Stock alloué"
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr "Éditer l'ordre de fabrication"
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr "Ajouter un ordre de fabrication"
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Site web"
@@ -5946,7 +6019,7 @@ msgstr "Fabricant"
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr "Quantité du paquet"
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr "En Commande"
 
@@ -6163,8 +6236,8 @@ msgstr "Sous-catégories"
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr "Structure"
 
@@ -6182,7 +6255,7 @@ msgstr "Catégorie de pièce de niveau supérieur"
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr "Modifier la catégorie"
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr "Action pour les sous-catégories de cette catégorie"
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr "Paramètres de Catégorie"
 
@@ -6226,13 +6300,13 @@ msgstr "Détails de la catégorie"
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr "Révision"
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr "Mots-clés"
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr "Stock disponible"
@@ -6337,7 +6411,7 @@ msgstr "En Production"
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr "Verrouillé"
 
@@ -6381,14 +6455,12 @@ msgstr "Pièce virtuelle"
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr "Date de création"
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr "Créé par"
 
@@ -6399,7 +6471,7 @@ msgstr "Fournisseur par Défaut"
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr "Échelle des prix"
 
@@ -6448,7 +6520,7 @@ msgstr "Pièces associées"
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr "Modifier la pièce"
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr "Ajouter Pièce"
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr "Transférer le stock de pièces"
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr "Commande"
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr "Prix du tarif"
 msgid "Sale History"
 msgstr "Historique des ventes"
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr "Maximum"
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr "Planifié"
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr "Minimum"
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr "La quantité est spéculative"
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr "Aucune date disponible pour la quantité fournie"
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr "Date de péremption"
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr "Quantité prévue"
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr "Quantité attendue"
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr "Valeur minimum"
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr "Valeur maximale"
@@ -6657,7 +6729,7 @@ msgstr "Prix total"
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "Composant"
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr "Référence client"
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr "Date de Livraison"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr "Sous-emplacements"
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr "Externe"
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr "Types d'emplacement"
 
@@ -7136,7 +7208,7 @@ msgstr "Pièces par défaut"
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr "Modifier l'emplacement du stock"
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr "Action pour les emplacements enfants à cet emplacement"
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr "Actions de l'emplacement"
 
@@ -7376,28 +7449,28 @@ msgstr "Sélectionner les colonnes"
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr "Excel (.xlsx)"
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr "Télécharger les données"
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr "Monter mes commandes"
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr "Remarquable"
 
@@ -7420,10 +7493,6 @@ msgstr "Remarquable"
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr "En retard"
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr "Filtrer par utilisateur"
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "Supprimer le filtre"
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "Sélection du filtre"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "Filtrer"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr "Filtres des tables"
 
@@ -7633,29 +7707,37 @@ msgstr "Le serveur à retourner un type de donnée incorrect"
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr "Supprimer les éléments sélectionnés"
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr "Êtes-vous sûr de vouloir supprimer les éléments sélectionnés ?"
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr "Supprimer les enregistrements sélectionnés"
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr "Actualiser les données"
 
@@ -7677,7 +7759,7 @@ msgstr "Information de pièce"
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr "Stockage externe"
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr "Inclut le stock de variantes"
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr "Construire"
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr "Possède un Tarif"
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr "Inclure les variantes"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr "Quantité Allouée"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr "Quantités disponibles"
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr "Testable"
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Virtuel"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr "Est une révision"
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr "Possède des révisions"
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr "Recevoir les éléments sélectionnés"
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr "Allouer les numéros de série"
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr "Révoquer"
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr "Informations du code-barres"
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr "Envoyé"
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr "Montrer uniquement les tests réussis"
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr "Montrer les stockages externes"
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr "Possède un type d'emplacement"
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr "Filtrer par type d'emplacement"
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr "Ajouter l'emplacement du stock"
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr "Ajouté"
diff --git a/src/frontend/src/locales/he/messages.po b/src/frontend/src/locales/he/messages.po
index 77d6124f78..14acef5609 100644
--- a/src/frontend/src/locales/he/messages.po
+++ b/src/frontend/src/locales/he/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: he\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Hebrew\n"
 "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "קישור"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr "פעולה זו תסיר את הקישור לברקוד המשויך"
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "בטל קישור של ברקוד"
@@ -196,29 +197,42 @@ msgstr "מועתק"
 msgid "Copy"
 msgstr "העתק"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "הדפס תווית"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "הדפס"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "דוח הדפסה"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "הדפס תווית"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "הדפס"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "דוח הדפסה"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "פעולות הדפסה"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "הדפס תווית"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "הדפס דוחות"
 
@@ -307,6 +308,41 @@ msgstr "כו"
 msgid "No"
 msgstr "לא"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "מלאי נמוך"
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "סמן כנקרא"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "האם להסיר את התמונה המשויכת מפריט זה?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "הסר"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "נקה"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "שלח"
 
@@ -715,7 +751,7 @@ msgstr "העלאת התמונה נכשלה"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "שגיאת שרת"
 msgid "A server error occurred"
 msgstr "אירעה שגיאת שרת"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "שגיאת טופס"
 
@@ -904,19 +940,20 @@ msgstr "שגיאת טופס"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "קיימות שגיאות עבור שדה טופס אחד או יותר"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "עדכן"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "שם המשתמש שלך"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "סיסמה"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "חזור/י על הסיסמה"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "הרשמה"
@@ -1097,6 +1134,7 @@ msgstr "מארח"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "גרסת API"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "תוספים"
@@ -1231,7 +1269,7 @@ msgstr "חפש"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "טוען"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "ייבוא רשומות"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "פעולות ברקוד"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "פעולות ברקוד"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "הצג ברקוד"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "קישור ברקוד"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr "קשר ברקוד מותאם אישית לפריט זה"
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "בטל קישור של ברקוד מותאם אישית"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "ערוך"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "ערוך פריט"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "מחק פריט"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "בהחזק [המתנה]"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Duplicate"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "פריט משוכפל"
 
@@ -1783,8 +1821,8 @@ msgstr "הגדרות מערכת"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "מרכז ניהול"
 
@@ -1823,7 +1861,7 @@ msgstr "פריטים"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "מלאי"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "רכישה"
 
@@ -1854,9 +1892,9 @@ msgstr "רכישה"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "מכירות"
 
@@ -1883,8 +1921,8 @@ msgstr "קבוצות"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "התראות"
 
@@ -1900,12 +1938,12 @@ msgstr "ניווט"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "אודות"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "סמן הכל כנקראו"
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "דגם לא ידוע: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "פריט"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr ""
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr "פריט במלאי"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "פריטים במלאי"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "מיקום מלאי"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "חברות"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "קוד פרוייקט"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "קוד פרויקט"
 
@@ -2390,7 +2429,7 @@ msgstr "הזמנות רכש"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "הזמנת רכש"
 
@@ -2406,11 +2445,11 @@ msgstr "שורות הזמנת רכש"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "הזמנת מכירה"
@@ -2419,12 +2458,12 @@ msgstr "הזמנת מכירה"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "הזמנות מכירה"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "משלוח הזמנת מכירות"
 
@@ -2442,7 +2481,7 @@ msgstr "החזרת הזמנה"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "החזרת הזמנות"
 
@@ -2491,7 +2530,11 @@ msgstr "בעלים"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr "תבנית תווית"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "תבניות תוויות"
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr "תבנית דוח"
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr "תבניות דווח"
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "משלוח"
 
@@ -2591,7 +2632,7 @@ msgstr "לא פעיל"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "אין מלאי"
 
@@ -2600,7 +2641,7 @@ msgstr "אין מלאי"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "מספר סידורי"
@@ -2611,10 +2652,10 @@ msgstr "מספר סידורי"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "כמות"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr ""
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr ""
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr ""
 msgid "In Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr ""
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr ""
 
@@ -4354,12 +4424,12 @@ msgstr ""
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "אין לך חשבון?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "הגדרות תצוגה"
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr ""
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "אתר אינטרנט"
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr "לא ניתן לערוך את כתב החומרים, מכיוון שהפ
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr "ניתן למעקב"
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr "הצג מכלולים שניתנים למעקב"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/hi/messages.po b/src/frontend/src/locales/hi/messages.po
index 0267a2744d..0415eadb98 100644
--- a/src/frontend/src/locales/hi/messages.po
+++ b/src/frontend/src/locales/hi/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: hi\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Hindi\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr ""
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr ""
@@ -196,28 +197,41 @@ msgstr ""
 msgid "Copy"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr ""
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
 msgstr ""
 
 #: src/components/buttons/PrintingActions.tsx:152
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr ""
 
@@ -307,6 +308,41 @@ msgstr "हाँ"
 msgid "No"
 msgstr ""
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr ""
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr ""
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr ""
 
@@ -715,7 +751,7 @@ msgstr ""
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr ""
 msgid "A server error occurred"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr ""
 
@@ -904,19 +940,20 @@ msgstr ""
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr ""
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "पासवर्ड"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr ""
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr ""
@@ -1097,6 +1134,7 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr ""
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr ""
@@ -1231,7 +1269,7 @@ msgstr ""
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr ""
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr ""
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr ""
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr ""
 
@@ -1783,8 +1821,8 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr ""
 
@@ -1823,7 +1861,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr ""
 
@@ -1854,9 +1892,9 @@ msgstr ""
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr ""
 
@@ -1883,8 +1921,8 @@ msgstr ""
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr ""
 
@@ -1900,12 +1938,12 @@ msgstr ""
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr ""
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr ""
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr ""
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr ""
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr ""
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr ""
 
@@ -2390,7 +2429,7 @@ msgstr ""
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2406,11 +2445,11 @@ msgstr ""
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr ""
@@ -2419,12 +2458,12 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr ""
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr ""
 
@@ -2591,7 +2632,7 @@ msgstr ""
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr ""
 
@@ -2600,7 +2641,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr ""
@@ -2611,10 +2652,10 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr ""
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr ""
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr ""
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr ""
 msgid "In Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr ""
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr ""
 
@@ -4354,12 +4424,12 @@ msgstr ""
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr ""
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr ""
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr ""
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr ""
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/hu/messages.po b/src/frontend/src/locales/hu/messages.po
index 96c444d395..8e3b3e15b2 100644
--- a/src/frontend/src/locales/hu/messages.po
+++ b/src/frontend/src/locales/hu/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: hu\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Hungarian\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Link"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Vonalkód leválasztása"
@@ -196,29 +197,42 @@ msgstr "Másolva"
 msgid "Copy"
 msgstr "Másolás"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Címke Nyomtatás"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "Nyomtatás"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Jelentés Nyomtatása"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Címke Nyomtatás"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "Nyomtatás"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Jelentés Nyomtatása"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Nyomtatási műveletek"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Címkék Nyomtatása"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Jelentések nyomtatása"
 
@@ -307,6 +308,41 @@ msgstr "Igen"
 msgid "No"
 msgstr "Nem"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr "Késésben"
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Alacsony készlet"
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Megjelölés olvasottként"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "Tételhez rendelt kép eltávolítása?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Eltávolítás"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Törlés"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Küldés"
 
@@ -715,7 +751,7 @@ msgstr "Képfeltöltés sikertelen"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "Szerver hiba"
 msgid "A server error occurred"
 msgstr "Szerver hiba történt"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Form hiba"
 
@@ -904,19 +940,20 @@ msgstr "Form hiba"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "Egy vagy több mező hibát jelez"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Frissítés"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Felhasználónév"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Jelszó"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "Jelszó megismétlése"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "Regisztráció"
@@ -1097,6 +1134,7 @@ msgstr "Kiszolgáló"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "API verzió"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Pluginok"
@@ -1231,7 +1269,7 @@ msgstr "Keresés"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Betöltés"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "Sorok importálása"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Vonalkód műveletek"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Vonalkód műveletek"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr "Vonalkód megtekintése"
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Vonalkód megtekintése"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Vonalkód hozzárendelése"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Egyedi vonalkód leválasztása"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Szerkesztés"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "Elem szerkesztése"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Tétel törlése"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "Tartás"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Másolás"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Elem másolása"
 
@@ -1783,8 +1821,8 @@ msgstr "Rendszerbeállítások"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Admin központ"
 
@@ -1823,7 +1861,7 @@ msgstr "Alkatrészek"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "Készlet"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "Beszerzés"
 
@@ -1854,9 +1892,9 @@ msgstr "Beszerzés"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Eladás"
 
@@ -1883,8 +1921,8 @@ msgstr "Csoportok"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Értesítések"
 
@@ -1900,12 +1938,12 @@ msgstr "Navigáció"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "Névjegy"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr "Beszállítók"
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr "Gyártók"
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "Vevők"
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr "Dátum"
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "Ismeretlen model: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Alkatrész"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "Beszállítói alkatrész"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "Beszállítói alkatrészek"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr "Gyártói alkatrész"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "Gyártói alkatrészek"
 
@@ -2289,9 +2328,9 @@ msgstr "Készlet tétel"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "Készlet tételek"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "Készlet hely"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "Cégek"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "Projektszám"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "Projektszámok"
 
@@ -2390,7 +2429,7 @@ msgstr "Beszerzési rendelés"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "Beszerzési rendelések"
 
@@ -2406,11 +2445,11 @@ msgstr "Beszerzési rendelés tételei"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "Vevői rendelés"
@@ -2419,12 +2458,12 @@ msgstr "Vevői rendelés"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "Vevői rendelések"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "Vevői rendelés szállítmány"
 
@@ -2442,7 +2481,7 @@ msgstr "Visszavétel"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "Visszavételek"
 
@@ -2491,7 +2530,11 @@ msgstr "Tulajdonosok"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "Szállítmány"
 
@@ -2591,7 +2632,7 @@ msgstr "Inaktív"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "Nincs készlet"
 
@@ -2600,7 +2641,7 @@ msgstr "Nincs készlet"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Sorozatszám"
@@ -2611,10 +2652,10 @@ msgstr "Sorozatszám"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Mennyiség"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr "Köteg"
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr "Gyártás kimenet"
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr "Gyártás kimenet"
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr "Készlet lefoglalva"
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr "Tárolás a már megérkezett készlettel"
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "Sorozatszámok"
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "Mennyiség hozzáadása csomagolási egységenként egyedi tételek helyett"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "Add meg a kezdeti mennyiséget ehhez a készlet tételhez"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "Add meg a kezdeti mennyiséget ehhez a készlet tételhez"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "Add meg az új készlet tételhez tartozó sorozatszámokat (vagy hagyd üresen)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr "Új készlet tétel"
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr "Mozgatás az alapértelmezett helyre"
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "Áthelyezés"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "Áthelyezés"
 msgid "In Stock"
 msgstr "Készleten"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Hozzáadás"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Mennyiség"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr "Készlethez ad"
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr "Készlet csökkentése"
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "Készlet áthelyezése"
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr "Leltározás"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr "Készlet állapot módosítása"
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr "Készlet összevonása"
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr "Készlet tétel törlése"
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr "Szülő készlet hely"
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "Elem létrehozva"
@@ -4289,11 +4351,19 @@ msgstr "Elem létrehozva"
 msgid "Item Updated"
 msgstr "Tétel frissítve"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "Elem törölve"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "Biztosan törli ezt az elemet?"
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "Ellenőrzöm hogy be vagy-e már jelentkezve"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "Nincs kijelölés"
 
@@ -4354,12 +4424,12 @@ msgstr "Nincs kijelölés"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "Bejelentkezés"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "Nincsen felhasználóneve?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
 msgid "Single Sign On"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
+msgstr "Nem engedélyezett"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr "Nem engedélyezett"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr "Sso nincs engedélyezve ezen a szerveren"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "A következő email címek vannak hozzárendelve a felhasználódhoz:"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "Elsődleges"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "Ellenőrizve"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "Nem ellenőrzött"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "Legyen elsődleges"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr "Megerősítés újraküldése"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "Email cím hozzáadása"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "E-mail cím"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "Email cím"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "Email hozzáadása"
 
@@ -5037,76 +5107,76 @@ msgstr "Email hozzáadása"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Megjelenítési beállítások"
@@ -5251,65 +5301,69 @@ msgstr "Utoljára betöltve"
 msgid "Base currency"
 msgstr "Alapvaluta"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
-msgstr "Háttér műveletek"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr "Háttér műveletek"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr "Hibajelentések"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "Pénznemek"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "Egyedi mértékegységek"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "Alkatrész paraméterek"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "Egyedi mértékegységek"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "Alkatrész paraméterek"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr "Kategória paraméterek"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr "Leltár"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,17 +5373,17 @@ msgstr "Berendezések"
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr "További beállítások"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
+msgstr "További beállítások"
+
 #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
-msgstr ""
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
 
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
@@ -5392,21 +5446,21 @@ msgstr "Külső pluginok nincsenek engedélyezve ebben az InvenTree példányban
 msgid "Plugin Errors"
 msgstr "Bővítmény Hibák"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr "Lapméret"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr "Fekvő"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "Vonalkódok"
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr "Riportolás"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr "Megjelenítési beállítások"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "Értesítések törlése"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "Előzmények"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "Megjelölés olvasatlanként"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr "Felelős"
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
-msgstr "Cél dátum"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
+msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
-msgstr ""
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
+msgstr "Cél dátum"
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr "Befejezetlen kimenetek"
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr "Gyártási utasítás szerkesztése"
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr "Gyártási utasítás létrehozása"
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Weboldal"
@@ -5946,7 +6019,7 @@ msgstr "Gyártó"
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr "Csomagolási mennyiség"
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr "Rendelve"
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr "Szerkezeti"
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr "Gyártáshoz foglalások"
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr "Vevői rendeléshez foglalások"
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr "Gyártásban"
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr "Létrehozás dátuma"
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr "Készítette"
 
@@ -6399,7 +6471,7 @@ msgstr "Alapértelmezett beszállító"
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr "Ártartomány"
 
@@ -6448,7 +6520,7 @@ msgstr "Kapcsolódó alkatrészek"
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr "Alkatrész szerkesztése"
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr "Alkatrész hozzáadása"
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr "Készlet áthelyezése"
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr "Készlet rendelés"
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr "Alkatrész műveletek"
 
@@ -6555,36 +6627,36 @@ msgstr "Eladási ár"
 msgid "Sale History"
 msgstr "Eladási előzmények"
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr "Maximum"
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr "Minimum"
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr "Teljes ár"
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "Összetevő"
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr "Rendelés műveletek"
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr "Vevői azonosító"
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr "Oszlopok kiválasztása"
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr "Késésben"
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr "Szűrés a felelős tulajdonosra"
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "Szűrő eltávolítása"
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "Szűrő kiválasztása"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "Szűrő"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr "A szerver hibás adattípust küldött vissza"
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr "Adatok frissítése"
 
@@ -7677,7 +7759,7 @@ msgstr "Alkatrész információ"
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr "Változatokkal együtt"
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr "Gyártásban"
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr "Gyártmány"
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr "Követésre kötelezett"
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr "Változatok is"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr "Opcionális sorok mutatása"
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr "Alkategóriákkal együtt"
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr "Van mértékegysége"
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr "Minimális készlet"
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr "Szűrés aktív státusz szerint"
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr "Szűrés szerelési tulajdonság szerint"
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr "Alkategóriákkal együtt"
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr "Szűrés összetevő tulajdonság szerint"
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr "Szűrés követésre kötelezettség szerint"
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr "Szűrés meglévő mértékegység szerint"
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr "Van IPN-je"
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr "Szűrés meglévő IPN szerint"
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr "Van készlet"
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr "Szűrés meglévő készlet szerint"
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr "Szűrés alacsony készlet szerint"
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr "Beszerezhető"
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr "Szűrés beszerezhetőség szerint"
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr "Értékesíthető"
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr "Szűrés értékesíthetőség szerint"
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Virtuális"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr "Szűrés virtuális alkatrészek szerint"
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr "Nem virtuális"
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr "Aktív változatok megjelenítése"
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr "Sablon"
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr "Ez a plugin nincs telepítve"
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr "Plugin"
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/id/messages.po b/src/frontend/src/locales/id/messages.po
index e0d255bb3b..9baaf5a474 100644
--- a/src/frontend/src/locales/id/messages.po
+++ b/src/frontend/src/locales/id/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: id\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Indonesian\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Tautan"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr ""
@@ -196,29 +197,42 @@ msgstr "Tersalin"
 msgid "Copy"
 msgstr "Salin"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Cetak label"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "Cetak"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Cetak Laporan"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Cetak label"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "Cetak"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Cetak Laporan"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Cetak label"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Cetak Laporan"
 
@@ -307,6 +308,41 @@ msgstr "Ya"
 msgid "No"
 msgstr "Tidak"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr ""
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr ""
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Hapus"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr ""
 
@@ -715,7 +751,7 @@ msgstr "Pengunggahan gambar gagal"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "Galat Server"
 msgid "A server error occurred"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr ""
 
@@ -904,19 +940,20 @@ msgstr ""
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Pembaruan"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Nama Anda"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Kata Sandi"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "Ulangi kata sandi"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr ""
@@ -1097,6 +1134,7 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "Versi API"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr ""
@@ -1231,7 +1269,7 @@ msgstr "Cari"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Memuat"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr "Pilihan"
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr ""
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr ""
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Lihat Barcode"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Sunting"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "Sunting Item"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Hapus item"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "Tahan"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr ""
 
@@ -1783,8 +1821,8 @@ msgstr "Pengaturan Sistem"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr ""
 
@@ -1823,7 +1861,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "Persediaan"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr ""
 
@@ -1854,9 +1892,9 @@ msgstr ""
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Penjualan"
 
@@ -1883,8 +1921,8 @@ msgstr ""
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Notifikasi"
 
@@ -1900,12 +1938,12 @@ msgstr ""
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "Tentang"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "Pelanggan"
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "Model Tidak diketahui: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr ""
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr ""
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr ""
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr ""
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "Perusahaan"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr ""
 
@@ -2390,7 +2429,7 @@ msgstr ""
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2406,11 +2445,11 @@ msgstr ""
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr ""
@@ -2419,12 +2458,12 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr "Pemilik"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr ""
 
@@ -2591,7 +2632,7 @@ msgstr "Tidak Aktif"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "Tidak ada persediaan"
 
@@ -2600,7 +2641,7 @@ msgstr "Tidak ada persediaan"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Nomor Seri"
@@ -2611,10 +2652,10 @@ msgstr "Nomor Seri"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Jumlah"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr "Tambah Catatan"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "Nomor Seri"
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr "Nomor Seri selanjutnya"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "Memuat..."
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr ""
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr ""
 msgid "In Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Tambah"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "Tidak ada pilihan"
 
@@ -4354,12 +4424,12 @@ msgstr "Tidak ada pilihan"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr ""
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "Terverifikasi"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "Tidak Terverifikasi"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "Tambah Alamat Surel"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "Surel"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "Alamat Surel"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "Tambah Surel"
 
@@ -5037,76 +5107,76 @@ msgstr "Tambah Surel"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Pengaturan Tampilan"
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr "Mata uang utama"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "Mata Uang"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr "Ukuran Halaman"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "Riwayat"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Laman"
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr "Total Harga"
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr "Tertunda"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr "Excel (.xlsx)"
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/it/messages.po b/src/frontend/src/locales/it/messages.po
index a89176da8e..8737ecab4d 100644
--- a/src/frontend/src/locales/it/messages.po
+++ b/src/frontend/src/locales/it/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: it\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Italian\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Collegamento"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr "Questo rimuoverà il collegamento al codice a barre associato"
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Scollega Codice a Barre"
@@ -196,29 +197,42 @@ msgstr "Copiato"
 msgid "Copy"
 msgstr "Copia"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Stampa Etichetta"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "Stampa"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Stampa report"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Stampa Etichetta"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "Stampa"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Stampa report"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Azioni di stampa"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Stampa Etichette"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Stampa report"
 
@@ -307,6 +308,41 @@ msgstr "Si"
 msgid "No"
 msgstr "No"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr "Nessun Widget Selezionato"
@@ -378,7 +414,7 @@ msgstr "Mostra il numero di categorie di articoli a cui sei sottoscritto"
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Disponibilità scarsa"
 
@@ -545,7 +581,7 @@ msgstr "Cambia la lingua dell'interfaccia utente"
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Segna come letto"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "Rimuovi l'immagine associata all'articolo?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Rimuovi"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Elimina"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Invia"
 
@@ -715,7 +751,7 @@ msgstr "Il caricamento della foto è fallito"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "Errore del server"
 msgid "A server error occurred"
 msgstr "Si è verificato un errore del server"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Errore Modulo"
 
@@ -904,19 +940,20 @@ msgstr "Errore Modulo"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "Esistono errori per uno o più campi del modulo"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Aggiorna"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Il tuo nome utente"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Password"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "Ripeti password"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "Registrati"
@@ -1097,6 +1134,7 @@ msgstr "Host"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "Versione API"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Plugin"
@@ -1231,7 +1269,7 @@ msgstr "Ricerca"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Caricamento"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "Importazione Record"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr "Opzioni"
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Azioni Codice A Barre"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Azioni Codice A Barre"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Visualizza codice a barre"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Collega Codice a Barre"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr "Collega un codice a barre personalizzato a questo articolo"
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Scollega codice a barre personalizzato"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Modifica"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "Modifica articolo"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Elimina articolo"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "Trattenuto"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Duplica"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Duplica articolo"
 
@@ -1783,8 +1821,8 @@ msgstr "Impostazioni di sistema"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Centro Amministratore"
 
@@ -1823,7 +1861,7 @@ msgstr "Articoli"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "Stock"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr "Fabbricazione"
 
@@ -1846,7 +1884,7 @@ msgstr "Fabbricazione"
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr ""
 
@@ -1854,9 +1892,9 @@ msgstr ""
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Vendite"
 
@@ -1883,8 +1921,8 @@ msgstr "Gruppi"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Notifiche"
 
@@ -1900,12 +1938,12 @@ msgstr "Navigazione"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "Info"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "Segna tutti come già letti"
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr "Informazioni Plugin"
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "Modello sconosciuto: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Articolo"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "Articolo Fornitore"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "Articoli fornitore"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr "Articolo Produttore"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "Articoli Produttore"
 
@@ -2289,9 +2328,9 @@ msgstr "Articolo in magazzino"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "Articoli in magazzino"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "Ubicazione articolo"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "Aziende"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "Codice del progetto"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "Codici del progetto"
 
@@ -2390,7 +2429,7 @@ msgstr "Ordine d'acquisto"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "Ordini d'acquisto"
 
@@ -2406,11 +2445,11 @@ msgstr "Righe ordine di acquisto"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "Ordine di Vendita"
@@ -2419,12 +2458,12 @@ msgstr "Ordine di Vendita"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "Ordini di Vendita"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "Spedizione dell'ordine di vendita"
 
@@ -2442,7 +2481,7 @@ msgstr "Ordine di reso"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "Ordini di reso"
 
@@ -2491,7 +2530,11 @@ msgstr "Proprietari"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr "Modello Etichetta"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "Modelli Etichetta"
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr "Modello Report"
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr "Modelli Report"
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "Spedizione"
 
@@ -2591,7 +2632,7 @@ msgstr "Inattivo"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "Nessuno stock"
 
@@ -2600,7 +2641,7 @@ msgstr "Nessuno stock"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Numero Seriale"
@@ -2611,10 +2652,10 @@ msgstr "Numero Seriale"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Quantità"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr "Articoli di stock assegnati"
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr "Regola Imballaggio"
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "Modifica Stato"
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr "Aggiungi Nota"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr "Memorizza con stock già ricevuto"
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr "Codice Lotto"
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr "Inserisci il codice lotto per gli articoli ricevuti"
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "Numeri di serie"
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr "Prossimo Numero Di Serie"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "Aggiungere la quantità data come pacchi invece di singoli articoli"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "Inserisci quantità iniziale per questo articolo in giacenza"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "Inserisci quantità iniziale per questo articolo in giacenza"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "Inserire i numeri di serie per la nuova giacenza (o lasciare vuoto)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr "Aggiungi Elemento Magazzino"
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr "Selezionare l'articolo da installare"
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "Caricamento..."
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr "Sposta nella posizione predefinita"
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "Sposta"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "Sposta"
 msgid "In Stock"
 msgstr "In giacenza"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Aggiungi"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Conta"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr "Aggiungi Giacenza"
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr "Rimuovi giacenza"
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "Trasferisci giacenza"
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr "Conteggio Giacenze"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr "Modifica stato giacenze"
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr "Unisci giacenze"
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr "Cancella Elemento di Magazzino"
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr "Posizione giacenza principale"
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr "Timeout"
 msgid "The request timed out"
 msgstr "La richiesta è scaduta"
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "Articolo Creato"
@@ -4289,11 +4351,19 @@ msgstr "Articolo Creato"
 msgid "Item Updated"
 msgstr "Articolo Aggiornato"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "Articolo Eliminato"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "Sei sicuro di voler eliminare questo articolo?"
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "Verifica se si è già connessi"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "Nessuna selezione"
 
@@ -4354,12 +4424,12 @@ msgstr "Nessuna selezione"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "Non hai un account?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Impostazioni Schermo"
@@ -5251,65 +5301,69 @@ msgstr "Ultimo recuperato"
 msgid "Base currency"
 msgstr "Valuta predefinita"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr "Scansioni di codici a barre"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr "Scansioni di codici a barre"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr "Dimensioni pagina"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr "Paesaggio"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr "Allega al modello"
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr "Tutte le unità"
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr ""
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Sito Web"
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr "Ordine"
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr "Programmato"
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr "La quantità è speculativa"
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr "Nessuna data disponibile per la quantità fornita"
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr "Data già passata"
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr "Quantità Programmata"
 
@@ -6600,42 +6672,42 @@ msgstr "Nessuna informazione di pianificazione disponibile per l'articolo selezi
 msgid "Expected Quantity"
 msgstr "Quantità prevista"
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr "Modifica Voce Inventario"
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr "Elimina Voce Inventario"
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr "Genera Report Inventario"
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr "Report inventario programmato"
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr "Nuovo Report Inventario"
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr "Data di emissione"
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr "Data di completamento"
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr "Elementi Assegnati"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr "Numero di monitoraggio"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr "Numero Fattura"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr "Dettagli spedizione"
 
@@ -7062,45 +7134,45 @@ msgstr "Dettagli spedizione"
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr "Annulla spedizione"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr "Invia Spedizione"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr "Azioni Di Spedizione"
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr "Mostra elementi inevasi"
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr "Mostra elementi in ritardo"
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr "Seleziona valore data"
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr "Questa azione non può essere annullata"
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr "I filtri tabella personalizzati sono attivi"
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr "Includi gli ordini per le varianti dell'articolo"
@@ -7945,17 +8027,17 @@ msgstr "Includi gli ordini per le varianti dell'articolo"
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr "Mostra Articolo"
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr "Giacenza Richiesta"
 msgid "View Build Order"
 msgstr "Vedi Ordine di Produzione"
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr "Sei iscritto alle notifiche per questa categoria"
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr "Vedi Ordine di Vendita"
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Virtuale"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr "Ricevi gli elementi selezionati"
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr "Mostra allocazioni in sospeso"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr "Assegnato alla Spedizione"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr "Mostra le allocazioni assegnate a una spedizione"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr "Nessuna spedizione"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr "Non spedito"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr "Modifica Assegnazione"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr "Rimuovi Assegnazione"
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr "Assegna Numeri di Serie"
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr "Vedi spedizione"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr "Modifica spedizione"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr "Annulla spedizione"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr "Informazione codice a barre"
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/ja/messages.po b/src/frontend/src/locales/ja/messages.po
index cd8b282152..78e17bdcf1 100644
--- a/src/frontend/src/locales/ja/messages.po
+++ b/src/frontend/src/locales/ja/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: ja\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Japanese\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
@@ -94,12 +94,13 @@ msgstr "バーコードデータをスキャンまたは入力"
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr "バーコードのリンクに失敗"
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "リンク"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr "これにより、関連するバーコードへのリンクが削除されます。"
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "リンク解除バーコード"
@@ -196,29 +197,42 @@ msgstr "コピーしました"
 msgid "Copy"
 msgstr "コピー"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "ラベルの印刷"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "印刷"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "印刷レポート"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "ラベルの印刷"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "印刷"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "印刷レポート"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "印刷アクション"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "ラベル印刷"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "印刷レポート"
 
@@ -307,6 +308,41 @@ msgstr "はい"
 msgid "No"
 msgstr "いいえ"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr "締め切り超過"
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr "ウィジェット未選択"
@@ -378,7 +414,7 @@ msgstr "登録済み部品カテゴリー数を表示"
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "在庫少"
 
@@ -545,7 +581,7 @@ msgstr "ユーザーインターフェースの言語変更"
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "既読にする"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "このアイテムから関連画像を削除しますか?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "削除"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "クリア"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "送信"
 
@@ -715,7 +751,7 @@ msgstr "画像のアップロードに失敗しました"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "サーバーエラー"
 msgid "A server error occurred"
 msgstr "サーバーエラーが発生しました"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "フォームエラー"
 
@@ -904,19 +940,20 @@ msgstr "フォームエラー"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "1つ以上のフォームフィールドにエラーがあります"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "更新"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "ユーザー名"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "パスワード"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "パスワードを再入力"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "登録"
@@ -1097,6 +1134,7 @@ msgstr "ホスト"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "API バージョン"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "プラグイン"
@@ -1231,7 +1269,7 @@ msgstr "検索"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "読み込み中"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "レコードのインポート"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr "インポートされた行"
 
@@ -1433,65 +1471,65 @@ msgstr "インポートされた行"
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr "オプション"
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "バーコードアクション"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "バーコードアクション"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr "バーコードを表示"
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "バーコードを表示"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "リンクバーコード"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr "このアイテムにカスタムバーコードをリンク"
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "カスタムバーコードのリンク解除"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "編集"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "アイテムを編集"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "アイテムを削除"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "保留する"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "複製"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "アイテムを複製"
 
@@ -1783,8 +1821,8 @@ msgstr "システム設定"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "管理センター"
 
@@ -1823,7 +1861,7 @@ msgstr "パーツ"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "在庫"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr "製造"
 
@@ -1846,7 +1884,7 @@ msgstr "製造"
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "購買"
 
@@ -1854,9 +1892,9 @@ msgstr "購買"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "販売"
 
@@ -1883,8 +1921,8 @@ msgstr "グループ"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "通知"
 
@@ -1900,12 +1938,12 @@ msgstr "ナビゲーション"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "概要"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "すべて既読にする"
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr "仕入先"
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr "メーカー"
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "顧客"
 
@@ -2058,8 +2096,8 @@ msgstr "プラグイン情報"
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr "日付"
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "不明なモデル{model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "パーツ"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "サプライヤー"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "サプライヤー・パーツ"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr "メーカー・パーツ"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "メーカー・パーツ"
 
@@ -2289,9 +2328,9 @@ msgstr "在庫商品"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "在庫商品"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "在庫場所"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "会社"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "プロジェクトコード"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "プロジェクトコード"
 
@@ -2390,7 +2429,7 @@ msgstr "注文"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "購入注文"
 
@@ -2406,11 +2445,11 @@ msgstr "発注ライン"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "セールスオーダー"
@@ -2419,12 +2458,12 @@ msgstr "セールスオーダー"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "セールスオーダー"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "販売注文の出荷"
 
@@ -2442,7 +2481,7 @@ msgstr "リターンオーダー"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "返品注文"
 
@@ -2491,7 +2530,11 @@ msgstr "所有者"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr "ラベルテンプレート"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "ラベルテンプレート"
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr "レポートテンプレート"
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr "レポートテンプレート"
 
@@ -2576,7 +2617,7 @@ msgstr "エラー"
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "発送"
 
@@ -2591,7 +2632,7 @@ msgstr "非アクティブ"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "在庫なし"
 
@@ -2600,7 +2641,7 @@ msgstr "在庫なし"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "シリアル番号"
@@ -2611,10 +2652,10 @@ msgstr "シリアル番号"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "数量"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr "スクール機能"
@@ -3132,7 +3173,7 @@ msgstr "選択した部品の誤りを訂正してください。"
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr "パーツの注文"
@@ -3610,7 +3651,7 @@ msgstr "ビルド出力"
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr "ビルド出力"
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr "割り当てられた"
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr "ソース・ロケーション"
 
@@ -3704,8 +3745,8 @@ msgstr "割り当てられた在庫品目"
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr "登録済み"
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr "パッケージの調整"
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "ステータスを変更"
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr "コメントを挿入"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr "入荷済みの在庫がある店舗"
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr "バッチコード"
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr "受領品のバッチコードを入力"
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "シリアル番号"
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr "次のシリアル番号"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "指定された数量を単品ではなくパックとして追加します。"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "この商品の初期数量を入力"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "この商品の初期数量を入力"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "新しい在庫のシリアル番号を入力(または空白のまま)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr "在庫状況"
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr "在庫商品の追加"
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr "取り付ける部品の選択"
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr "株式譲渡の確認"
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "読み込み中…"
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr "デフォルトの場所に移動"
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "移動"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "移動"
 msgid "In Stock"
 msgstr "在庫あり"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "追加"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "カウント"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr "在庫追加"
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr "在庫追加"
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr "在庫の削除"
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr "在庫一掃"
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "株式譲渡"
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr "株式譲渡"
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr "株式譲渡"
 msgid "Count Stock"
 msgstr "在庫数"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr "在庫数"
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr "在庫状況の変更"
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr "在庫状況の変更"
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr "株式の併合"
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr "株式併合"
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr "顧客への在庫割り当て"
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr "顧客に割り当てられた在庫"
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr "在庫アイテムの削除"
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr "ストック削除"
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr "親株式所在地"
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr "エントリーリスト"
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr "タイムアウト"
 msgid "The request timed out"
 msgstr "リクエストがタイムアウトしました"
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "作成項目"
@@ -4289,11 +4351,19 @@ msgstr "作成項目"
 msgid "Item Updated"
 msgstr "アイテム更新"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "アイテムが削除されました"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "このアイテムを削除してもよろしいですか?"
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "ログイン済みかどうかの確認"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "選択なし"
 
@@ -4354,12 +4424,12 @@ msgstr "選択なし"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "ログイン"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "アカウントをお持ちですか?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
 msgid "Single Sign On"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
+msgstr "有効になっていません"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr "有効になっていません"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr "このサーバーではシングルサインオンが有効になっていません"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "以下のメールアドレスがアカウントに関連付けられています:"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "プライマリー"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "承認済み"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "未承認"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "メインに指定"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr "検証の再送信"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "メールアドレスの追加"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "メールアドレス"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "電子メールアドレス"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "メールアドレスを追加"
 
@@ -5037,76 +5107,76 @@ msgstr "メールアドレスを追加"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr "取消し"
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "ディスプレイの設定"
@@ -5251,65 +5301,69 @@ msgstr "最終フェッチ"
 msgid "Base currency"
 msgstr "基準通貨"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr "データインポート"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr "バーコードスキャン"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
-msgstr "バックグラウンドタスク"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
+msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr "バーコードスキャン"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr "バックグラウンドタスク"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr "エラーレポート"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "通貨"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr "カスタムステート"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "カスタム単位"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "パーツパラメータ"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "カスタム単位"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "パーツパラメータ"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr "カテゴリー・パラメーター"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr "ストックテイク"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr "ロケーションタイプ"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,17 +5373,17 @@ msgstr "機械"
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr "高度なオプション"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
+msgstr "高度なオプション"
+
 #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
-msgstr ""
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
 
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
@@ -5392,21 +5446,21 @@ msgstr "このInvenTreeインストールでは、外部プラグインは有効
 msgid "Plugin Errors"
 msgstr "プラグインのエラー"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr "ページサイズ"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr "ランドスケープ"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr "モデルに装着"
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr "全てのユニット"
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "バーコード"
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr "レポート"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr "表示オプション"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "通知の削除"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "履歴"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "未読にする"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr "通知の削除"
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr "通知の削除"
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,17 +5701,43 @@ msgstr "責任"
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr "作成日"
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
+#: src/pages/build/BuildDetail.tsx:196
+#: src/pages/part/PartDetail.tsx:280
+#~ msgid "Unlink custom barcode from part"
+#~ msgstr "Unlink custom barcode from part"
+
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr "場所"
+
+#: src/pages/build/BuildDetail.tsx:202
+#~ msgid "Build Order updated"
+#~ msgstr "Build Order updated"
+
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
+msgstr "目的地"
+
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
+msgstr "作成日"
+
+#: src/pages/build/BuildDetail.tsx:221
+#~ msgid "Edit build order"
+#~ msgstr "Edit build order"
+
+#: src/pages/build/BuildDetail.tsx:226
+#~ msgid "Duplicate build order"
+#~ msgstr "Duplicate build order"
+
+#: src/pages/build/BuildDetail.tsx:229
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:255
 #: src/pages/sales/ReturnOrderDetail.tsx:220
 #: src/pages/sales/SalesOrderDetail.tsx:231
@@ -5661,16 +5745,11 @@ msgstr "作成日"
 msgid "Start Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:196
-#: src/pages/part/PartDetail.tsx:280
-#~ msgid "Unlink custom barcode from part"
-#~ msgstr "Unlink custom barcode from part"
+#: src/pages/build/BuildDetail.tsx:231
+#~ msgid "Delete build order"
+#~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:202
-#~ msgid "Build Order updated"
-#~ msgstr "Build Order updated"
-
-#: src/pages/build/BuildDetail.tsx:203
+#: src/pages/build/BuildDetail.tsx:237
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:263
 #: src/pages/sales/ReturnOrderDetail.tsx:228
 #: src/pages/sales/SalesOrderDetail.tsx:239
@@ -5681,31 +5760,11 @@ msgstr ""
 msgid "Target Date"
 msgstr "終了日に達したら"
 
-#: src/pages/build/BuildDetail.tsx:211
+#: src/pages/build/BuildDetail.tsx:245
 #: src/tables/sales/SalesOrderLineItemTable.tsx:303
 msgid "Completed"
 msgstr "完了"
 
-#: src/pages/build/BuildDetail.tsx:221
-#~ msgid "Edit build order"
-#~ msgstr "Edit build order"
-
-#: src/pages/build/BuildDetail.tsx:226
-#~ msgid "Duplicate build order"
-#~ msgstr "Duplicate build order"
-
-#: src/pages/build/BuildDetail.tsx:231
-#~ msgid "Delete build order"
-#~ msgstr "Delete build order"
-
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
-msgstr "場所"
-
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
-msgstr "目的地"
-
 #: src/pages/build/BuildDetail.tsx:276
 msgid "Build Details"
 msgstr "詳細"
@@ -5727,7 +5786,7 @@ msgstr "不完全なアウトプット"
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr "割当株式"
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr "ビルド順序の編集"
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr "ビルドオーダーの追加"
 
@@ -5902,6 +5961,20 @@ msgstr "組立注文"
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "ウェブサイト"
@@ -5946,7 +6019,7 @@ msgstr "製造元"
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr "パック数量"
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr "注文中"
 
@@ -6163,8 +6236,8 @@ msgstr "サブカテゴリ"
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr "構造に関するパターン"
 
@@ -6182,7 +6255,7 @@ msgstr "トップレベルのパーツカテゴリ"
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr "部品カテゴリーの編集"
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr "このカテゴリーに含まれる子どもの行動"
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr "カテゴリー・アクション"
 
@@ -6226,13 +6300,13 @@ msgstr "カテゴリー詳細"
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr "ビルド・オーダー・アロケーション"
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr "販売注文の割り当て"
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr "リビジョン"
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr "キーワード"
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr "在庫状況"
@@ -6337,7 +6411,7 @@ msgstr "生産中"
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr "ロック中"
 
@@ -6381,14 +6455,12 @@ msgstr "バーチャルパート"
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr "作成日時"
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr "作成者"
 
@@ -6399,7 +6471,7 @@ msgstr "デフォルト・サプライヤー"
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr "料金帯"
 
@@ -6448,7 +6520,7 @@ msgstr "関連部品"
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr "パーツを編集"
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr "部品追加"
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr "部品在庫の移動"
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr "注文"
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr "注文在庫"
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr "パートアクション"
 
@@ -6555,36 +6627,36 @@ msgstr "セール価格"
 msgid "Sale History"
 msgstr "販売履歴"
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr "最大"
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr "予定済み"
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr "最小"
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr "数量は投機的"
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr "提供数量の日付はありません"
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr "日付は過去"
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr "予定数量"
 
@@ -6600,42 +6672,42 @@ msgstr "選択した部品のスケジュール情報がありません。"
 msgid "Expected Quantity"
 msgstr "予定数量"
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr "ストックテークエントリーの編集"
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr "ストックテークエントリーの削除"
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr "ストックテイク・レポートの作成"
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr "ストックテイク報告書予定"
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr "株式価値"
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr "新しいストックテイク・レポート"
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr "最小値"
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr "最大値は"
@@ -6657,7 +6729,7 @@ msgstr "合計金額"
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "コンポーネント"
 
@@ -6894,7 +6966,7 @@ msgstr "発行日"
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr "完了日"
@@ -6935,7 +7007,7 @@ msgstr "注文の操作"
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr "得意先参照"
@@ -7025,36 +7097,36 @@ msgstr "完全な販売注文"
 msgid "Ship Order"
 msgstr "船舶発注"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr "出荷基準"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr "割当項目"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr "追跡番号"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr "請求書番号"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr "出荷日"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr "配達日"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr "出荷の詳細"
 
@@ -7062,45 +7134,45 @@ msgstr "出荷の詳細"
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr "出荷の編集"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr "出荷のキャンセル"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr "完全出荷"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr "処理待ち"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr "発送済み"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr "配送済み"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr "発送"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr "出荷アクション"
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr "サブロケーション"
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr "外部"
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr "ロケーションタイプ"
 
@@ -7136,7 +7208,7 @@ msgstr "デフォルトパーツ"
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr "在庫場所の編集"
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr "この場所の子供のための行動"
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr "ロケーションアクション"
 
@@ -7376,28 +7449,28 @@ msgstr "列の選択"
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr "エクセル (.xlsx)"
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr "ダウンロードデータ"
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr "私に割り当てられた命令を表示"
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr "並外れた"
 
@@ -7420,10 +7493,6 @@ msgstr "並外れた"
 msgid "Show outstanding items"
 msgstr "未処理項目の表示"
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr "締め切り超過"
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr "期限切れアイテムの表示"
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr "責任所有者による絞り込み"
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr "レポートのフィルタリング"
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "フィルタを削除"
@@ -7560,16 +7634,16 @@ msgstr "フィルター値の入力"
 msgid "Select date value"
 msgstr "日付の値を選択"
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "フィルタを選択"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "フィルタ"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr "テーブルフィルター"
 
@@ -7633,29 +7707,37 @@ msgstr "サーバーが不正なデータ型を返しました。"
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr "選択したアイテムを削除"
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr "選択したアイテムを削除しますか?"
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr "この操作は元に戻せません。"
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr "カスタムテーブルフィルターが有効"
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr "選択したレコードの削除"
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr "データを更新する"
 
@@ -7677,7 +7759,7 @@ msgstr "部品情報"
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr "外部在庫"
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr "バリアントストック付き"
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr "建物"
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr "消耗品の表示"
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr "価格"
 
@@ -7894,7 +7976,7 @@ msgstr "部品がロックされているため、部品表を編集できませ
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr "アセンブリ"
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr "アクティブなアセンブリの表示"
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr "追跡可能"
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr "ビルド出力に割り当てられた項目を表示"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr "バリアントを含む"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr "部品バリアントの注文を含む"
@@ -7945,17 +8027,17 @@ msgstr "部品バリアントの注文を含む"
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr "注文ステータス"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr "割当数量"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr "利用可能な数量"
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr "オプションラインの表示"
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr "テスト可能"
 
@@ -8113,38 +8195,34 @@ msgstr "部品を見る"
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr "必要在庫"
 msgid "View Build Order"
 msgstr "ビルドオーダーを見る"
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr "このカテゴリの通知を購読しています"
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr "サブカテゴリを含む"
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr "結果にサブカテゴリーを含める"
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr "構造カテゴリを表示"
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr "ユーザーが購読しているカテゴリを表示"
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr "新部品カテゴリー"
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr "部品カテゴリの追加"
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr "選択肢のあるテンプレートを表示"
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr "ユニット"
 
@@ -8795,145 +8886,154 @@ msgstr "受信アイテムの表示"
 msgid "View Sales Order"
 msgstr "販売オーダーを見る"
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr "最小在庫"
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr "有効なパーツでフィルタ"
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr "部品ロック状態によるフィルタリング"
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr "アセンブリ属性によるフィルタリング"
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr "サブカテゴリのパーツを含む"
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr "コンポーネント属性でフィルタ"
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr "テスト可能な属性によるフィルタリング"
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr "追跡可能属性でフィルタ"
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr "単位のある部品でフィルタ"
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr "IPNあり"
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr "内部部品番号を持つ部品によるフィルタリング"
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr "在庫あり"
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr "在庫がある部品でフィルタ"
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr "在庫の少ない部品で絞り込み"
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr "購入可能"
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr "購入可能な部品でフィルタ"
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr "販売可能"
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr "販売可能な部品でフィルタ"
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "仮想部品"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr "仮想部品でフィルタ"
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr "仮想部品ではない"
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr "テンプレート"
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr "テンプレートになっているパーツで絞り込み"
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr "改訂版"
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr "改定箇所による絞り込み"
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr "改定あり"
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr "リビジョンがある部品でフィルタリング"
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr "価格情報のある部品でフィルタリング"
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr "在庫のある部品で絞り込み"
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr "ユーザーが購読しているパートによるフィルタリング"
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr "ストックテイク"
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr "在庫情報のある部品で絞り込み"
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr "選択した部品の注文"
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr "アクティブなバリアントを表示"
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr "テンプレート"
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr "プラグインがインストールされていません"
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr "プラグイン"
 
@@ -9438,37 +9537,45 @@ msgstr "選択した商品を受け取る"
 msgid "Receive Item"
 msgstr "商品を受け取る"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr "未処理の割り当てを表示"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr "出荷に割り当て"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr "貨物に割り当てられた配分を表示"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr "出荷なし"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr "未出荷"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr "編集配分"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr "割り当ての削除"
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr "シリアル番号の割り当て"
@@ -9506,38 +9613,85 @@ msgstr "注文在庫"
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr "出荷の作成"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr "アイテム"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr "出荷を見る"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr "出荷の編集"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr "出荷のキャンセル"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr "貨物の追加"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr "出荷済み貨物の表示"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr "配送済みの貨物の表示"
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr "取消し"
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr "バーコード情報"
@@ -9659,6 +9813,14 @@ msgstr "エラーレポート削除"
 msgid "Error Details"
 msgstr "エラーの詳細"
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr "インポートセッションの削除"
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr "インポートセッションの作成"
 
@@ -9733,18 +9895,17 @@ msgstr "インポートセッションの作成"
 msgid "Uploaded"
 msgstr "アップロード"
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr "モデルタイプ"
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr "対象機種による絞り込み"
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr "インポートセッションのステータスによるフィルタリング"
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr "有効なステータスによるフィルタリング"
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr "利用可能なアイテムを表示"
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr "サブロケーションを含む"
 
@@ -10315,39 +10476,47 @@ msgstr "合格したテストのみを表示"
 msgid "Show results for enabled tests"
 msgstr "有効化されたテストの結果を表示"
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr "結果にサブロケーションを含める"
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
-msgstr "構造上の位置を表示"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
+msgstr "結果にサブロケーションを含める"
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr "構造上の位置を表示"
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr "外部ロケーションの表示"
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr "ロケーションタイプ"
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr "ロケーションタイプによる絞り込み"
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr "ストックロケーションの追加"
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr "追加"
diff --git a/src/frontend/src/locales/ko/messages.po b/src/frontend/src/locales/ko/messages.po
index d0e1bd9d39..9969f271c6 100644
--- a/src/frontend/src/locales/ko/messages.po
+++ b/src/frontend/src/locales/ko/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: ko\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Korean\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr ""
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr ""
@@ -196,28 +197,41 @@ msgstr ""
 msgid "Copy"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr ""
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
 msgstr ""
 
 #: src/components/buttons/PrintingActions.tsx:152
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr ""
 
@@ -307,6 +308,41 @@ msgstr ""
 msgid "No"
 msgstr ""
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr ""
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr ""
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr ""
 
@@ -715,7 +751,7 @@ msgstr ""
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr ""
 msgid "A server error occurred"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr ""
 
@@ -904,19 +940,20 @@ msgstr ""
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr ""
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr ""
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr ""
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr ""
@@ -1097,6 +1134,7 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr ""
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr ""
@@ -1231,7 +1269,7 @@ msgstr ""
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr ""
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr ""
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr ""
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr ""
 
@@ -1783,8 +1821,8 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr ""
 
@@ -1823,7 +1861,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr ""
 
@@ -1854,9 +1892,9 @@ msgstr ""
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr ""
 
@@ -1883,8 +1921,8 @@ msgstr ""
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr ""
 
@@ -1900,12 +1938,12 @@ msgstr ""
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr ""
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr ""
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr ""
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr ""
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr ""
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr ""
 
@@ -2390,7 +2429,7 @@ msgstr ""
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2406,11 +2445,11 @@ msgstr ""
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr ""
@@ -2419,12 +2458,12 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr ""
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr ""
 
@@ -2591,7 +2632,7 @@ msgstr ""
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr ""
 
@@ -2600,7 +2641,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr ""
@@ -2611,10 +2652,10 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr ""
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr ""
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr ""
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr ""
 msgid "In Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr ""
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr ""
 
@@ -4354,12 +4424,12 @@ msgstr ""
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr ""
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr ""
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr ""
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr ""
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/lt/messages.po b/src/frontend/src/locales/lt/messages.po
index adce5b986e..fb89ec0a2f 100644
--- a/src/frontend/src/locales/lt/messages.po
+++ b/src/frontend/src/locales/lt/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: lt\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Lithuanian\n"
 "Plural-Forms: nplurals=4; plural=(n%10==1 && (n%100>19 || n%100<11) ? 0 : (n%10>=2 && n%10<=9) && (n%100>19 || n%100<11) ? 1 : n%1!=0 ? 2: 3);\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr ""
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr ""
@@ -196,28 +197,41 @@ msgstr ""
 msgid "Copy"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr ""
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
 msgstr ""
 
 #: src/components/buttons/PrintingActions.tsx:152
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr ""
 
@@ -307,6 +308,41 @@ msgstr ""
 msgid "No"
 msgstr ""
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr ""
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr ""
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr ""
 
@@ -715,7 +751,7 @@ msgstr ""
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr ""
 msgid "A server error occurred"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr ""
 
@@ -904,19 +940,20 @@ msgstr ""
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr ""
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr ""
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr ""
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr ""
@@ -1097,6 +1134,7 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr ""
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr ""
@@ -1231,7 +1269,7 @@ msgstr ""
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr ""
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr ""
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr ""
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr ""
 
@@ -1783,8 +1821,8 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr ""
 
@@ -1823,7 +1861,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr ""
 
@@ -1854,9 +1892,9 @@ msgstr ""
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr ""
 
@@ -1883,8 +1921,8 @@ msgstr ""
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr ""
 
@@ -1900,12 +1938,12 @@ msgstr ""
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr ""
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr ""
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr ""
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr ""
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr ""
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr ""
 
@@ -2390,7 +2429,7 @@ msgstr ""
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2406,11 +2445,11 @@ msgstr ""
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr ""
@@ -2419,12 +2458,12 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr ""
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr ""
 
@@ -2591,7 +2632,7 @@ msgstr ""
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr ""
 
@@ -2600,7 +2641,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr ""
@@ -2611,10 +2652,10 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr ""
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr ""
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr ""
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr ""
 msgid "In Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr ""
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr ""
 
@@ -4354,12 +4424,12 @@ msgstr ""
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr ""
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr ""
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr ""
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr ""
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/lv/messages.po b/src/frontend/src/locales/lv/messages.po
index 6edbeefea6..52bb110503 100644
--- a/src/frontend/src/locales/lv/messages.po
+++ b/src/frontend/src/locales/lv/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: lv\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Latvian\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr ""
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr ""
@@ -196,28 +197,41 @@ msgstr ""
 msgid "Copy"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr ""
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
 msgstr ""
 
 #: src/components/buttons/PrintingActions.tsx:152
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr ""
 
@@ -307,6 +308,41 @@ msgstr ""
 msgid "No"
 msgstr ""
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr ""
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr ""
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr ""
 
@@ -715,7 +751,7 @@ msgstr ""
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr ""
 msgid "A server error occurred"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr ""
 
@@ -904,19 +940,20 @@ msgstr ""
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr ""
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr ""
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr ""
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr ""
@@ -1097,6 +1134,7 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr ""
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr ""
@@ -1231,7 +1269,7 @@ msgstr ""
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr ""
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr ""
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr ""
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr ""
 
@@ -1783,8 +1821,8 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr ""
 
@@ -1823,7 +1861,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr ""
 
@@ -1854,9 +1892,9 @@ msgstr ""
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr ""
 
@@ -1883,8 +1921,8 @@ msgstr ""
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr ""
 
@@ -1900,12 +1938,12 @@ msgstr ""
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr ""
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr ""
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr ""
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr ""
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr ""
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr ""
 
@@ -2390,7 +2429,7 @@ msgstr ""
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2406,11 +2445,11 @@ msgstr ""
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr ""
@@ -2419,12 +2458,12 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr ""
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr ""
 
@@ -2591,7 +2632,7 @@ msgstr ""
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr ""
 
@@ -2600,7 +2641,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr ""
@@ -2611,10 +2652,10 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr ""
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr ""
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr ""
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr ""
 msgid "In Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr ""
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr ""
 
@@ -4354,12 +4424,12 @@ msgstr ""
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr ""
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr ""
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr ""
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr ""
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/nl/messages.po b/src/frontend/src/locales/nl/messages.po
index 510b242e30..f49664e37a 100644
--- a/src/frontend/src/locales/nl/messages.po
+++ b/src/frontend/src/locales/nl/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: nl\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Dutch\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -94,12 +94,13 @@ msgstr "Scan of voer de barcode in"
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr "Streepjescode koppelen mislukt"
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Link"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr "Dit verwijdert de link naar de bijbehorende barcode"
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Barcode loskoppelen"
@@ -196,29 +197,42 @@ msgstr "Gekopieerd"
 msgid "Copy"
 msgstr "Kopieer"
 
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
+msgstr "Labels afdrukken"
+
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
+msgstr "Rapporten afdrukken"
+
 #: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
-msgstr "Afdrukken"
+#~ msgid "Printing"
+#~ msgstr "Printing"
 
 #: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
-msgstr "Afdrukken succesvol voltooid"
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
 
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Label afdrukken"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr "Labels afdrukken"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "Afdrukken"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr "Rapporten afdrukken"
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Rapport afdrukken"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr "Rapporten afdrukken"
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Label afdrukken"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "Afdrukken"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Rapport afdrukken"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Acties afdrukken"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Labels afdrukken"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Raport afdrukken"
 
@@ -307,6 +308,41 @@ msgstr "Ja"
 msgid "No"
 msgstr "Nee"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr "Kalender filters"
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr "Vorige maand"
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr "Selecteer maand"
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr "Volgende maand"
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr "Bestelling bijgewerkt"
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr "Fout bij bijwerken bestelling"
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr "Achterstallig"
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr "Geen widgets geselecteerd"
@@ -378,7 +414,7 @@ msgstr "Toon het aantal onderdelen categorieën waarop u bent geabonneerd"
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Lage voorraad"
 
@@ -545,7 +581,7 @@ msgstr "Wijzig de taal van de gebruikersomgeving"
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Als gelezen Markeren"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "De bijbehorende afbeelding van dit item verwijderen?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Verwijderen"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Wis"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Versturen"
 
@@ -715,7 +751,7 @@ msgstr "Afbeelding uploaden is mislukt"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "Server fout"
 msgid "A server error occurred"
 msgstr "Er is een serverfout opgetreden"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Formulier fout"
 
@@ -904,19 +940,20 @@ msgstr "Formulier fout"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "Er staan fouten in één of meer formuliervelden"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Bijwerken"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Je gebruikersnaam"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Wachtwoord"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "Herhaal wachtwoord"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "Registreren"
@@ -1097,6 +1134,7 @@ msgstr "Hostnaam"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "API versie"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Plug-ins"
@@ -1231,7 +1269,7 @@ msgstr "Zoeken"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Laden"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "Importeren records"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr "Geïmporteerde regels"
 
@@ -1433,65 +1471,65 @@ msgstr "Geïmporteerde regels"
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr "Opties"
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Barcode acties"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Barcode acties"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr "Bekijk Barcode"
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Bekijk barcode"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Link Barcode"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr "Link een aangepaste barcode aan dit item"
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Aangepaste barcode ontkoppelen"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Bewerken"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "Item bewerken"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Item verwijderen"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "Ingedrukt houden"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Dupliceren"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Artikel dupliceren"
 
@@ -1783,8 +1821,8 @@ msgstr "Systeem instellingen"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Beheerder Center"
 
@@ -1823,7 +1861,7 @@ msgstr "Onderdelen"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "Voorraad"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr "Productie"
 
@@ -1846,7 +1884,7 @@ msgstr "Productie"
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "Kopen"
 
@@ -1854,9 +1892,9 @@ msgstr "Kopen"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Verkoop"
 
@@ -1883,8 +1921,8 @@ msgstr "Groepen"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Meldingen"
 
@@ -1900,12 +1938,12 @@ msgstr "Navigatie"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "Over"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "Markeer alle berichten als gelezen"
 
@@ -1952,18 +1990,18 @@ msgstr "Verwijder zoekgroep"
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr "Leveranciers"
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr "Fabrikant"
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "Klanten"
 
@@ -2058,8 +2096,8 @@ msgstr "Plug-in informatie"
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr "Datum"
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2183,7 +2222,7 @@ msgstr "Fout bij laden van inhoud"
 
 #: src/components/plugins/RemoteComponent.tsx:98
 msgid "Error occurred while loading plugin content"
-msgstr "Fout opgetreden tijdens het laden van de plugin inhoud"
+msgstr "Fout opgetreden tijdens het laden van de plug-in inhoud"
 
 #: src/components/render/Instance.tsx:238
 msgid "Unknown model: {model}"
@@ -2198,24 +2237,24 @@ msgstr "Onbekend model: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Onderdeel"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "Leverancier onderdeel"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "Leveranciers onderdelen"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr "Fabrikant onderdeel"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "Fabrikant onderdelen"
 
@@ -2289,9 +2328,9 @@ msgstr "Voorraad item"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "Voorraad items"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "Voorraad locatie"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2330,23 +2369,23 @@ msgstr "Bouwen"
 
 #: src/components/render/ModelType.tsx:110
 msgid "Builds"
-msgstr ""
+msgstr "Bouwen"
 
 #: src/components/render/ModelType.tsx:118
 msgid "Build Line"
-msgstr ""
+msgstr "Bouw lijn"
 
 #: src/components/render/ModelType.tsx:119
 msgid "Build Lines"
-msgstr ""
+msgstr "Bouw lijnen"
 
 #: src/components/render/ModelType.tsx:126
 msgid "Build Item"
-msgstr ""
+msgstr "Bouw onderdeel"
 
 #: src/components/render/ModelType.tsx:127
 msgid "Build Items"
-msgstr ""
+msgstr "Bouw onderdelen"
 
 #: src/components/render/ModelType.tsx:132
 #: src/pages/company/CompanyDetail.tsx:326
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "Bedrijven"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "Project code"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "Project codes"
 
@@ -2390,7 +2429,7 @@ msgstr "Inkooporder"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "Inkooporders"
 
@@ -2406,11 +2445,11 @@ msgstr "Inkooporder regels"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "Verkooporder"
@@ -2419,12 +2458,12 @@ msgstr "Verkooporder"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "Verkooporders"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "Verzending verkooporder"
 
@@ -2442,7 +2481,7 @@ msgstr "Retourorder"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "Retourorders"
 
@@ -2491,7 +2530,11 @@ msgstr "Eigenaren"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr "Label sjabloon"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "Label sjablonen"
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr "Rapporteer sjabloon"
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr "Rapport sjablonen"
 
@@ -2576,7 +2617,7 @@ msgstr "Foutmeldingen"
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "Verzending"
 
@@ -2591,7 +2632,7 @@ msgstr "Inactief"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "Geen voorraad"
 
@@ -2600,7 +2641,7 @@ msgstr "Geen voorraad"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Serienummer"
@@ -2611,10 +2652,10 @@ msgstr "Serienummer"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Aantal"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr "Batch"
@@ -3132,7 +3173,7 @@ msgstr "Corrigeer de fouten in de geselecteerde onderdelen"
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr "Onderdelen bestellen"
@@ -3610,7 +3651,7 @@ msgstr "Bouw Uitvoer"
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr "Bouw Uitvoer"
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr "Toegewezen"
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr "Bron locatie"
 
@@ -3704,8 +3745,8 @@ msgstr "Voorraad items toegewezen"
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr "Geabonneerd"
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr "Stel vervaldatum in"
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr "Verpakking aanpassen"
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "Status wijzigen"
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr "Opmerking toevoegen"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr "Winkel met reeds ontvangen voorraad"
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr "Batch code"
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr "Voer batch code in voor ontvangen items"
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "Serienummers"
 
@@ -3865,7 +3906,7 @@ msgstr "Voer een vervaldatum in voor ontvangen items"
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr "Volgend serienummer"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "Opgegeven hoeveelheid als pakket toevoegen in plaats van individuele artikelen"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "Voer de initiële hoeveelheid in voor dit voorraadartikel"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "Voer de initiële hoeveelheid in voor dit voorraadartikel"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "Voer serienummer in voor nieuwe voorraad (of laat het leeg)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr "Voorraad status"
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr "Voorraad item toevoegen"
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr "Selecteer het onderdeel om te installeren"
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr "Bevestig voorraad overdracht"
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "Laden..."
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr "Verplaats naar standaardlocatie"
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "Verplaatsen"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "Verplaatsen"
 msgid "In Stock"
 msgstr "Op voorraad"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Toevoegen"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Aantal"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr "Voorraad toevoegen"
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr "Voorraad toegevoegd"
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr "Voorraad verwijderen"
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr "Voorraad verwijderd"
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "Voorraad verplaatsen "
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr "Voorraadartikel verplaatst"
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr "Voorraadartikel verplaatst"
 msgid "Count Stock"
 msgstr "Tel voorraad"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr "Voorraad geteld"
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr "Wijzig voorraad status"
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr "Voorraad status gewijzigd"
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr "Voorraad samenvoegen"
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr "Voorraad samengevoegd"
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr "Voorraad toewijzen aan klant"
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr "Voorraad toegewezen aan klant"
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr "Voorraad items verwijderen"
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr "Voorraad verwijderd"
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr "Bovenliggende voorraad locatie"
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr "Lijst van items om uit te kiezen"
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4157,7 +4198,7 @@ msgstr "Is al ingelogd"
 #: src/functions/auth.tsx:116
 #: src/functions/auth.tsx:275
 msgid "There is a conflicting session on the server for this browser. Please logout of that first."
-msgstr "Er is een tegenstrijdige sessie op de server voor deze browser. Gelieve eerst uit te loggen."
+msgstr "Er is een tegenstrijdige sessie op de server voor deze browser. Meld u eerst af."
 
 #: src/functions/auth.tsx:142
 #~ msgid "Found an existing login - using it to log you in."
@@ -4281,6 +4322,27 @@ msgstr "Tijdslimiet"
 msgid "The request timed out"
 msgstr "De aanvraag duurde te lang"
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "Item gemaakt"
@@ -4289,11 +4351,19 @@ msgstr "Item gemaakt"
 msgid "Item Updated"
 msgstr "Item geüpdate"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr "Items bijgewerkt"
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr "Update meerdere items"
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "Item verwijderd"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "Weet u zeker dat u dit item wilt verwijderen?"
 
@@ -4342,7 +4412,7 @@ msgstr "Uitloggen"
 msgid "Checking if you are already logged in"
 msgstr "Controleren of je al ingelogd bent"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "Niets geselecteerd"
 
@@ -4354,12 +4424,12 @@ msgstr "Niets geselecteerd"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "Inloggen"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "Heb je geen account?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr "Multi-factor login"
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr "TOTP Code"
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr "Voer uw TOTP of herstelcode in"
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr "Positie"
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr "Type"
 
@@ -4927,31 +4997,31 @@ msgstr "Eenmalig wachtwoord"
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr "Voer de TOTP-code in om ervoor te zorgen dat deze correct geregistreerd is"
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr "E-mail adressen"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
-msgstr "E-mail adressen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
 msgid "Single Sign On"
 msgstr "Enkele aanmelding"
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
+msgstr "Niet actief"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr "Niet actief"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr "Eenmalige aanmelding is niet ingeschakeld voor deze server"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr "Multi-Factor authenticatie"
 
@@ -4959,65 +5029,65 @@ msgstr "Multi-Factor authenticatie"
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr "Toegang tokens"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr "Fout tijdens het bijwerken van e-mail"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr "Niet geconfigureerd"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr "Momenteel zijn er geen e-mailadressen geregistreerd."
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "De volgende e-mailadressen zijn gekoppeld aan uw account:"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "Hoofd"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "Gecontroleerd"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "Niet-geverifieerd"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "Maak primair"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr "Verificatie opnieuw verzenden"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "E-mailadres toevoegen"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "E-mail"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "E-mailadres"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr "Fout tijdens het toevoegen van e-mail"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "E-mail toevoegen"
 
@@ -5037,76 +5107,76 @@ msgstr "E-mail toevoegen"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr "Er zijn geen providers verbonden met dit account."
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr "U kunt inloggen op uw account via een van de volgende providers"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr "Provider link verwijderen"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr "Bekijken"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr "Geen multi-factor tokens geconfigureerd voor dit account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr "Laatst gebruikt op"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr "Gemaakt op"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr "Herstel codes"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr "Ongebruikte codes"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr "Gebruikte codes"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr "Fout tijdens het registreren van herstelcodes"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr "TOTP"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr "Tijdgebonden eenmalige wachtwoord"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr "Eenmalige vooraf gegenereerde recovery codes"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr "+ Een token toevoegen"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr "TOTP Token registreren"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr "Fout bij het registreren van TOTP token"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr "Voer je wachtwoord in"
 
@@ -5114,30 +5184,10 @@ msgstr "Voer je wachtwoord in"
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr "Intrekken"
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr "Fout bij intrekken token"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Toon Instellingen"
@@ -5212,7 +5262,7 @@ msgstr "Stippen"
 
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:92
 msgid "Reauthentication"
-msgstr "Herauthenticatie"
+msgstr "Opnieuw authenticatie"
 
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:108
 msgid "OK"
@@ -5251,65 +5301,69 @@ msgstr "Laatst opgehaald"
 msgid "Base currency"
 msgstr "Basis valuta"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr "Gebruikers beheer"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr "Gegevens importeren"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr "Barcode scans"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
-msgstr "Achtergrond taken"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
+msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr "Barcode scans"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr "Achtergrond taken"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr "Fouten rapporten"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "Valuta"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr "Aangepaste statussen"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "Aangepaste eenheden"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "Onderdeel parameters"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "Aangepaste eenheden"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "Onderdeel parameters"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr "Categorie parameters"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr "Voorraadcontrole"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr "Locatie soorten"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,17 +5373,17 @@ msgstr "Machines"
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr "Geavanceerde instellingen"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
+msgstr "Geavanceerde instellingen"
+
 #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
-msgstr "Gegenereerde labels"
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
 
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
@@ -5392,21 +5446,21 @@ msgstr "Externe plug-ins zijn niet ingeschakeld voor deze InvenTree installatie.
 msgid "Plugin Errors"
 msgstr "Plug-in fouten"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr "Pagina grootte"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr "Liggend"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr "Koppelen aan model"
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr "Gegenereerde rapporten"
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr "Alle eenheden"
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "Barcodes"
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr "Rapporteren"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr "Toon opties"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "Verwijder meldingen"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "Geschiedenis"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "Markeren als ongelezen"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr "Notificaties verwijderen"
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr "Notificaties verwijderen"
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,17 +5701,43 @@ msgstr "Verantwoordelijk"
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr "Aangemaakt"
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
+#: src/pages/build/BuildDetail.tsx:196
+#: src/pages/part/PartDetail.tsx:280
+#~ msgid "Unlink custom barcode from part"
+#~ msgstr "Unlink custom barcode from part"
+
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr "Elke locatie"
+
+#: src/pages/build/BuildDetail.tsx:202
+#~ msgid "Build Order updated"
+#~ msgstr "Build Order updated"
+
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
+msgstr "Doel Locatie"
+
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
+msgstr "Aangemaakt"
+
+#: src/pages/build/BuildDetail.tsx:221
+#~ msgid "Edit build order"
+#~ msgstr "Edit build order"
+
+#: src/pages/build/BuildDetail.tsx:226
+#~ msgid "Duplicate build order"
+#~ msgstr "Duplicate build order"
+
+#: src/pages/build/BuildDetail.tsx:229
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:255
 #: src/pages/sales/ReturnOrderDetail.tsx:220
 #: src/pages/sales/SalesOrderDetail.tsx:231
@@ -5661,16 +5745,11 @@ msgstr "Aangemaakt"
 msgid "Start Date"
 msgstr "Start datum"
 
-#: src/pages/build/BuildDetail.tsx:196
-#: src/pages/part/PartDetail.tsx:280
-#~ msgid "Unlink custom barcode from part"
-#~ msgstr "Unlink custom barcode from part"
+#: src/pages/build/BuildDetail.tsx:231
+#~ msgid "Delete build order"
+#~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:202
-#~ msgid "Build Order updated"
-#~ msgstr "Build Order updated"
-
-#: src/pages/build/BuildDetail.tsx:203
+#: src/pages/build/BuildDetail.tsx:237
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:263
 #: src/pages/sales/ReturnOrderDetail.tsx:228
 #: src/pages/sales/SalesOrderDetail.tsx:239
@@ -5681,31 +5760,11 @@ msgstr "Start datum"
 msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
+#: src/pages/build/BuildDetail.tsx:245
 #: src/tables/sales/SalesOrderLineItemTable.tsx:303
 msgid "Completed"
 msgstr "Compleet"
 
-#: src/pages/build/BuildDetail.tsx:221
-#~ msgid "Edit build order"
-#~ msgstr "Edit build order"
-
-#: src/pages/build/BuildDetail.tsx:226
-#~ msgid "Duplicate build order"
-#~ msgstr "Duplicate build order"
-
-#: src/pages/build/BuildDetail.tsx:231
-#~ msgid "Delete build order"
-#~ msgstr "Delete build order"
-
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
-msgstr "Elke locatie"
-
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
-msgstr "Doel Locatie"
-
 #: src/pages/build/BuildDetail.tsx:276
 msgid "Build Details"
 msgstr "Bouw details"
@@ -5727,7 +5786,7 @@ msgstr "Onvolledige uitvoer"
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr "Toegewezen voorraad"
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr "Bewerk bouwopdracht"
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr "Voeg bouwopdracht toe"
 
@@ -5902,6 +5961,20 @@ msgstr "Productieorder"
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr "Tabelweergave"
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr "Kalenderoverzicht"
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Website"
@@ -5946,7 +6019,7 @@ msgstr "Fabrikant"
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr "Pakket hoeveelheid"
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr "In bestelling"
 
@@ -6163,8 +6236,8 @@ msgstr "Subcategorieën"
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr "Structureel"
 
@@ -6182,7 +6255,7 @@ msgstr "Hoogste niveau onderdeel categorie"
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr "Categorie bewerken"
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr "Actie voor subcategorieën in deze categorie"
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr "Categorie acties"
 
@@ -6226,13 +6300,13 @@ msgstr "Categorie details"
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr "Productie-opdracht toewijzingen"
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr "Verkoopordertoewijzingen"
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr "Revisie"
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr "Trefwoorden"
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr "Beschikbare voorraad"
@@ -6337,7 +6411,7 @@ msgstr "In productie"
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr "Vergrendeld"
 
@@ -6381,14 +6455,12 @@ msgstr "Virtueel onderdeel"
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr "Aangemaakt op"
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr "Aangemaakt door"
 
@@ -6399,7 +6471,7 @@ msgstr "Standaard leverancier"
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr "Prijs bereik"
 
@@ -6448,7 +6520,7 @@ msgstr "Gerelateerde onderdelen"
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr "Onderdeel bewerken"
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr "Onderdeel toevoegen"
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr "Voorraad van onderdeel verplaatsen"
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr "Order"
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr "Voorraad bestelling"
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr "Acties van onderdeel"
 
@@ -6555,36 +6627,36 @@ msgstr "Verkoop prijs"
 msgid "Sale History"
 msgstr "Verkoop geschiedenis"
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr "Maximaal"
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr "Gepland"
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr "Minimaal"
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr "Hoeveelheid is speculatief"
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr "Geen datum beschikbaar voor de opgegeven hoeveelheid"
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr "Datum is in het verleden"
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr "Geplande hoeveelheid"
 
@@ -6600,42 +6672,42 @@ msgstr "Er is geen planningsinformatie beschikbaar voor het geselecteerde deel"
 msgid "Expected Quantity"
 msgstr "Verwachte hoeveelheid"
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr "Invoer voorraadopname bewerken"
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr "Voorraad invoer verwijderen"
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr "Voorraadcontrole Rapport creëren"
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr "Voorraadcontrole verslag gepland"
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr "Voorraad waarde"
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr "Nieuwe voorraadcontrole rapport"
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr "Minimale waarde"
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr "Maximale waarde"
@@ -6657,7 +6729,7 @@ msgstr "Totale prijs"
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "Onderdeel"
 
@@ -6894,7 +6966,7 @@ msgstr "Datum van uitgifte"
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr "Datum van afronding"
@@ -6935,7 +7007,7 @@ msgstr "Order acties"
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr "Klantreferentie"
@@ -7025,36 +7097,36 @@ msgstr "Verkooporder voltooien"
 msgid "Ship Order"
 msgstr "Bestelling verzenden"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr "Verzending referentie"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr "Toegewezen items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr "Tracking nummer"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr "Factuur nummer"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr "Verzenddatum"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr "Levering datum"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr "Verzending details"
 
@@ -7062,45 +7134,45 @@ msgstr "Verzending details"
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr "Bewerk verzending"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr "Verzending annuleren"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr "Zending voltooien"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr "In behandeling"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr "Verzonden"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr "Geleverd"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr "Verzending verzenden"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr "Verzending acties"
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr "Sub locatie"
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr "Extern"
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr "Locatie type"
 
@@ -7136,7 +7208,7 @@ msgstr "Standaard onderdelen"
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr "Voorraadlocatie bewerken"
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr "Actie voor onderliggende locaties in deze locatie"
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr "Locatie acties"
 
@@ -7376,28 +7449,28 @@ msgstr "Kolommen selecteren"
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr "Excel (.xlsx)"
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr "Download gegevens"
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr "Toon aan mij toegewezen orders"
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr "Openstaand"
 
@@ -7420,10 +7493,6 @@ msgstr "Openstaand"
 msgid "Show outstanding items"
 msgstr "Uitstaande items tonen"
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr "Achterstallig"
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr "Achterstallige items tonen"
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr "Filter op verantwoordelijke eigenaar"
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr "Filter op gebruiker"
@@ -7542,6 +7612,10 @@ msgstr "Filter op gebruiker die de bestelling heeft aangemaakt"
 msgid "Filter by user who issued the order"
 msgstr "Filteren op gebruiker die de bestelling heeft uitgegeven"
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr "Filter op onderdeel categorie"
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "Filter verwijderen"
@@ -7560,16 +7634,16 @@ msgstr "Voer filterwaarde in"
 msgid "Select date value"
 msgstr "Selecteer een datumwaarde"
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "Filter selecteren"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "Filter"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr "Tabel filters"
 
@@ -7633,29 +7707,37 @@ msgstr "Server heeft onjuist gegevenstype teruggestuurd"
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr "Geselecteerde items verwijderen"
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr "Weet u zeker dat u de geselecteerde items wilt verwijderen?"
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr "Deze actie kan niet ongedaan worden gemaakt"
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr "Items verwijderd"
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr "Verwijderen van item is mislukt."
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr "Aangepaste tabelfilters zijn actief"
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr "Verwijder de geselecteerde records"
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr "Gegevens vernieuwen"
 
@@ -7677,7 +7759,7 @@ msgstr "Informatie over onderdeel"
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr "Externe voorraad"
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr "Bevat variant voorraad"
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr "Bouwen"
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr "Toon verbruikte items"
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr "Heeft prijzen"
 
@@ -7894,7 +7976,7 @@ msgstr "Factuur van materialen kan niet worden bewerkt, omdat het onderdeel is v
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr "Assemblage"
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr "Toon actieve assemblage orders"
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr "Volgbaar"
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr "Toon items toegewezen aan bouwuitvoer"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr "Inclusief varianten"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr "Bestellingen voor onderdelen varianten opnemen"
@@ -7945,17 +8027,17 @@ msgstr "Bestellingen voor onderdelen varianten opnemen"
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr "Status van bestelling"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr "Toegewezen hoeveelheid"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr "Beschikbare hoeveelheid"
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr "Toon optionele regels"
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr "Testbaar"
 
@@ -8113,38 +8195,34 @@ msgstr "Onderdeel weergeven"
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr "Streefdatum"
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr "Toon bestellingen met een streefdatum"
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr "Heeft een startdatum"
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr "Toon bestellingen met een startdatum"
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr "Filter op onderdeel categorie"
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr "Vereiste voorraad"
 msgid "View Build Order"
 msgstr "Bekijk bouwopdracht"
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr "Abonneer je op meldingen voor deze categorie"
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr "Inclusief subcategorieën"
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr "Inclusief subcategorieën in zoekresultaten"
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr "Structurele categorieën tonen"
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr "Toon categorieën waarop de gebruiker geabonneerd is"
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr "Nieuwe onderdeel categorie"
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr "Voeg categorie voor onderdelen toe"
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr "Toon sjablonen met keuzes"
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr "Heeft eenheden"
 
@@ -8795,145 +8886,154 @@ msgstr "Toon ontvangen items"
 msgid "View Sales Order"
 msgstr "Bekijk verkooporder"
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr "Minimale voorraad"
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr "Filter op actieve status van onderdeel"
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr "Filter op vergrendelde status van onderdeel"
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr "Filteren op samenvoegen attribuut"
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr "Inclusief onderdelen in subcategorieën"
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr "Filter op component kenmerk"
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr "Filter op testbare eigenschap"
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr "Filteren op traceerbare kenmerk"
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr "Filter op onderdelen die eenheden bevatten"
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr "Heeft IPN"
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr "Filter op onderdelen met een intern deelnummer"
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr "Heeft voorraad"
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr "Filter op onderdelen die voorraad hebben"
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr "Filter op onderdelen met een lage voorraad"
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr "Aankoopbaar"
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr "Filteren op onderdelen die aankoopbaar zijn"
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr "Verkoopbaar"
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr "Filter op delen die verkoopbaar zijn"
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Virtueel"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr "Filter op virtuele onderdelen"
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr "Niet virtueel"
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr "Is een sjabloon"
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr "Filter op onderdelen die sjablonen zijn"
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr "Is een variant"
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr "Filter op onderdelen die sjablonen zijn"
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr "Is revisie"
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr "Filter op onderdelen die revisies zijn"
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr "Heeft revisies"
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr "Filter op onderdelen die revisies hebben"
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr "Filter op onderdelen met prijsinformatie"
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr "Filter op onderdelen die beschikbare voorraad hebben"
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr "Filter op delen waarop de gebruiker geabonneerd is"
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr "Heeft voorraad"
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr "Filteren op onderdelen met voorraadgegevens"
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr "Categorie instellen"
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr "Categorie voor geselecteerde onderdelen instellen"
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr "Geselecteerde delen bestellen"
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr "Toon actieve varianten"
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr "Sjabloon"
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr "De plug-in is niet geïnstalleerd"
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr "Plug-in"
 
@@ -9438,37 +9537,45 @@ msgstr "Geselecteerde items ontvangen"
 msgid "Receive Item"
 msgstr "Item ontvangen"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr "Toon openstaande toewijzingen"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr "Toegewezen aan verzending"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr "Toon toewijzingen die zijn toegewezen aan een verzending"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr "Geen verzending"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr "Niet verzonden"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr "Bewerk voorraadtoewijzing"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr "Verwijder toewijzing"
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr "Serienummers toewijzen"
@@ -9506,38 +9613,85 @@ msgstr "Bestel voorraad"
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr "Zending aanmaken"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr "Artikelen"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr "Verzending weergeven"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr "Verzending bewerken"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr "Verzending annuleren"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr "Voeg verzending toe"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr "Toon verzendingen die zijn verzonden"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr "Toon verzendingen die afgeleverd zijn"
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr "Intrekken"
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr "Fout bij intrekken token"
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr "Barcode informatie"
@@ -9659,6 +9813,14 @@ msgstr "Foutmelding verwijderd"
 msgid "Error Details"
 msgstr "Fout details"
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr "Importsessie verwijderen"
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr "Importsessie aanmaken"
 
@@ -9733,18 +9895,17 @@ msgstr "Importsessie aanmaken"
 msgid "Uploaded"
 msgstr "Geüpload"
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr "Model type"
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr "Filter op doeltype"
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr "Filter op status van import sessie"
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr "Filter op ingeschakelde status"
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr "Rapport uitvoer"
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr "Toon items die beschikbaar zijn"
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr "Inclusief sub locaties"
 
@@ -10195,7 +10356,7 @@ msgstr "Toon items op een externe locatie"
 
 #: src/tables/stock/StockItemTable.tsx:586
 msgid "Add a new stock item"
-msgstr ""
+msgstr "Voeg een nieuw voorraadartikel toe"
 
 #: src/tables/stock/StockItemTable.tsx:595
 msgid "Remove some quantity from a stock item"
@@ -10289,7 +10450,7 @@ msgstr "Kon testresultaat niet opnemen"
 
 #: src/tables/stock/StockItemTestResultTable.tsx:339
 msgid "Pass Test"
-msgstr ""
+msgstr "Test geslaagd"
 
 #: src/tables/stock/StockItemTestResultTable.tsx:388
 msgid "Show results for required tests"
@@ -10315,39 +10476,47 @@ msgstr "Toon alleen goedgekeurde tests"
 msgid "Show results for enabled tests"
 msgstr "Toon resultaten voor ingeschakelde tests"
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr "Inclusief sub locaties in resultaten"
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
-msgstr "Structurele locaties weergeven"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
+msgstr "Inclusief sub locaties in resultaten"
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr "Structurele locaties weergeven"
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr "Toon externe locaties"
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr "Heeft locatie type"
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr "Filter op locatie type"
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr "Voorraad locatie toevoegen"
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr "Toegevoegd"
diff --git a/src/frontend/src/locales/no/messages.po b/src/frontend/src/locales/no/messages.po
index bce944e85d..3d0c2fa5cd 100644
--- a/src/frontend/src/locales/no/messages.po
+++ b/src/frontend/src/locales/no/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: no\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Norwegian\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Lenke"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Fjern strekkodekobling"
@@ -196,28 +197,41 @@ msgstr ""
 msgid "Copy"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr ""
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
 msgstr ""
 
 #: src/components/buttons/PrintingActions.tsx:152
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr ""
 
@@ -307,6 +308,41 @@ msgstr "Ja"
 msgid "No"
 msgstr "Nei"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr "Forfalt"
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Lav lagerbeholdning"
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Merk som lest"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Fjern"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Send"
 
@@ -715,7 +751,7 @@ msgstr ""
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr ""
 msgid "A server error occurred"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Skjemafeil"
 
@@ -904,19 +940,20 @@ msgstr "Skjemafeil"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Oppdater"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Your username"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Passord"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr ""
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr ""
@@ -1097,6 +1134,7 @@ msgstr "Vert"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "API-versjon"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Utvidelser"
@@ -1231,7 +1269,7 @@ msgstr "Søk"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Laster"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Strekkodehandlinger"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Strekkodehandlinger"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Vis strekkode"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Koble mot strekkode"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Koble fra egendefinert strekkode"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Rediger"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Slett element"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Dupliser"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Dupliser element"
 
@@ -1783,8 +1821,8 @@ msgstr "Systeminnstillinger"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Adminsenter"
 
@@ -1823,7 +1861,7 @@ msgstr "Deler"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "Lagerbeholdning"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "Innkjøp"
 
@@ -1854,9 +1892,9 @@ msgstr "Innkjøp"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Salg"
 
@@ -1883,8 +1921,8 @@ msgstr "Grupper"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Varlser"
 
@@ -1900,12 +1938,12 @@ msgstr "Navigasjon"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "Om"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr "Leverandører"
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr "Produsenter"
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "Kunder"
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr "Dato"
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "Ukjent modell: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Del"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "Leverandørdel"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "Leverandørdeler"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr "Produsentdel"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "Produsentdeler"
 
@@ -2289,9 +2328,9 @@ msgstr "Lagervare"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "Lagervarer"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "Lagerplassering"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "Firma"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "Prosjektkode"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "Prosjektkoder"
 
@@ -2390,7 +2429,7 @@ msgstr "Innkjøpsordre"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "Innkjøpsordrer"
 
@@ -2406,11 +2445,11 @@ msgstr "Ordrelinjer for innkjøpsordre"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "Salgsordre"
@@ -2419,12 +2458,12 @@ msgstr "Salgsordre"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "Salgsordrer"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "Salgsordreforsendelse"
 
@@ -2442,7 +2481,7 @@ msgstr "Returordre"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "Returordrer"
 
@@ -2491,7 +2530,11 @@ msgstr "Eiere"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "Forsendelse"
 
@@ -2591,7 +2632,7 @@ msgstr ""
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "Ingen lagerbeholdning"
 
@@ -2600,7 +2641,7 @@ msgstr "Ingen lagerbeholdning"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Serienummer"
@@ -2611,10 +2652,10 @@ msgstr "Serienummer"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Antall"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr "Tildelt"
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "Serienumre"
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "Legg til gitt mengde som pakker i stedet for enkeltprodukter"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "Angi innledende antall for denne lagervaren"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "Angi innledende antall for denne lagervaren"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "Angi serienumre for ny lagerbeholdning (eller la stå tom)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr ""
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr ""
 msgid "In Stock"
 msgstr "På lager"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Legg til"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Tell"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "Overfør lager"
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr "Tell beholdning"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "Sjekker om du allerede er innlogget"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "Ingen utvalg"
 
@@ -4354,12 +4424,12 @@ msgstr "Ingen utvalg"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "Innlogging"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr ""
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
 msgid "Single Sign On"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
+msgstr "Ikke aktivert"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr "Ikke aktivert"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr "Single Sign On er ikke aktivert for denne serveren"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "Følgende e-postadresser er tilknyttet din konto:"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "Primær"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "Bekreftet"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "Ubekreftet"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "Gjør til primær"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr "Re-send bekreftelse"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "Legg til e-postadresse"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "E-post"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "E-postadresse"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "Legg til e-post"
 
@@ -5037,76 +5107,76 @@ msgstr "Legg til e-post"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Visningsinnstillinger"
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
-msgstr "Bakgrunnsoppgaver"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr "Bakgrunnsoppgaver"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr "Feilrapporter"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "Egendefinerte enheter"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "Delparametere"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "Egendefinerte enheter"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "Delparametere"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr "Lagertelling"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,17 +5373,17 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr "Avanserte Innstillinger"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
+msgstr "Avanserte Innstillinger"
+
 #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
-msgstr ""
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
 
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
@@ -5392,21 +5446,21 @@ msgstr "Eksterne utvidelser er ikke aktivert for denne InvenTree-installasjonen.
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "Strekkoder"
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr "Rapportering"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr "Visningsvalg"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "Logg"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "Marker som ulest"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,17 +5701,43 @@ msgstr "Ansvarlig"
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr "Opprettet"
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
+#: src/pages/build/BuildDetail.tsx:196
+#: src/pages/part/PartDetail.tsx:280
+#~ msgid "Unlink custom barcode from part"
+#~ msgstr "Unlink custom barcode from part"
+
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
+#: src/pages/build/BuildDetail.tsx:202
+#~ msgid "Build Order updated"
+#~ msgstr "Build Order updated"
+
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
+msgstr ""
+
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
+msgstr "Opprettet"
+
+#: src/pages/build/BuildDetail.tsx:221
+#~ msgid "Edit build order"
+#~ msgstr "Edit build order"
+
+#: src/pages/build/BuildDetail.tsx:226
+#~ msgid "Duplicate build order"
+#~ msgstr "Duplicate build order"
+
+#: src/pages/build/BuildDetail.tsx:229
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:255
 #: src/pages/sales/ReturnOrderDetail.tsx:220
 #: src/pages/sales/SalesOrderDetail.tsx:231
@@ -5661,16 +5745,11 @@ msgstr "Opprettet"
 msgid "Start Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:196
-#: src/pages/part/PartDetail.tsx:280
-#~ msgid "Unlink custom barcode from part"
-#~ msgstr "Unlink custom barcode from part"
+#: src/pages/build/BuildDetail.tsx:231
+#~ msgid "Delete build order"
+#~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:202
-#~ msgid "Build Order updated"
-#~ msgstr "Build Order updated"
-
-#: src/pages/build/BuildDetail.tsx:203
+#: src/pages/build/BuildDetail.tsx:237
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:263
 #: src/pages/sales/ReturnOrderDetail.tsx:228
 #: src/pages/sales/SalesOrderDetail.tsx:239
@@ -5681,31 +5760,11 @@ msgstr ""
 msgid "Target Date"
 msgstr "Måldato"
 
-#: src/pages/build/BuildDetail.tsx:211
+#: src/pages/build/BuildDetail.tsx:245
 #: src/tables/sales/SalesOrderLineItemTable.tsx:303
 msgid "Completed"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:221
-#~ msgid "Edit build order"
-#~ msgstr "Edit build order"
-
-#: src/pages/build/BuildDetail.tsx:226
-#~ msgid "Duplicate build order"
-#~ msgstr "Duplicate build order"
-
-#: src/pages/build/BuildDetail.tsx:231
-#~ msgid "Delete build order"
-#~ msgstr "Delete build order"
-
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
-msgstr ""
-
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:276
 msgid "Build Details"
 msgstr "Produksjonsdetaljer"
@@ -5727,7 +5786,7 @@ msgstr "Ufullstendige artikler"
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr "Rediger produksjonsordre"
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr "Legg til produksjonsordre"
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Nettside"
@@ -5946,7 +6019,7 @@ msgstr "Produsent"
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr "Pakkeantall"
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr "I bestilling"
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr "Strukturell"
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr "Produksjonsordre-tildelinger"
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr "Salgsordretildelinger"
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr "Nøkkelord"
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr "Under produksjon"
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr "Opprettelsesdato"
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr "Prisområde"
 
@@ -6448,7 +6520,7 @@ msgstr "Relaterte Deler"
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr "Rediger del"
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr "Overfør delbeholdning"
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr "Delhandlinger"
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr "Total pris"
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "Komponent"
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr "Ordrehandlinger"
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr "Kundereferanse"
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr "Velg Kolonner"
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr "Vis ordre tildelt meg"
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr "Utestående"
 
@@ -7420,10 +7493,6 @@ msgstr "Utestående"
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr "Forfalt"
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "Fjern filter"
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "Velg filter"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "Filter"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr "Tabellfiltre"
 
@@ -7633,29 +7707,37 @@ msgstr "Serveren returnerte feil datatype"
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr "Slett valgte oppføringer"
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr "Oppdater data"
 
@@ -7677,7 +7759,7 @@ msgstr "Delinformasjon"
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr "Inkluderer variantbeholdning"
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr "Produseres"
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr "Vis forbruksartikler"
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr "Har prising"
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr "Sammenstilling"
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr "Vis aktive sammenstillinger"
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr "Sporbar"
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr "Inkluder varianter"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr "Inkluder underkategorier"
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr "Inkluder underkategorier i resultatene"
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr "Vis strukturelle kategorier"
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr "Vis maler med valg"
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr "Har enheter"
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr "Minimumsbeholdning"
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr "Filtrer etter del aktiv-status"
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr "Filtrer etter sammenstillingsattributt"
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr "Inkluder deler i underkategorier"
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr "Filtrer etter komponentattributt"
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr "Filtrer etter sporbar attributt"
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr "Filtrer etter deler som har enheter"
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr "Har IPN"
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr "Filtrer etter deler som har internt delnummer"
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr "Har beholdning"
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr "Filtrer etter deler som har lagerbeholdning"
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr "Filtrer etter deler som har lav lagerbeholdning"
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr "Kjøpbar"
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr "Filtrer etter deler som kan kjøpes"
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr "Salgbar"
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr "Filtrer etter deler som kan selges"
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Virtuell"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr "Filtrer etter deler som er virtuelle"
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr "Ikke virtuell"
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr "Vis aktive varianter"
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr "Mal"
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr "Utvidelsen er ikke installert"
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr "Utvidelse"
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr "Feilrapport slettet"
 msgid "Error Details"
 msgstr "Feildetaljer"
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr "Vis elementer som er tilgjengelige"
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr "Inkluder underplasseringer"
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr "Inkluder underkategorier i resultatene"
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
-msgstr "Vis strukturelle plasseringer"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
+msgstr "Inkluder underkategorier i resultatene"
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr "Vis strukturelle plasseringer"
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr "Vis eksterne plasseringer"
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr "Har plasseringstype"
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/pl/messages.po b/src/frontend/src/locales/pl/messages.po
index ce726fdeee..dd3bc3ffbb 100644
--- a/src/frontend/src/locales/pl/messages.po
+++ b/src/frontend/src/locales/pl/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: pl\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Polish\n"
 "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr ""
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Odłącz Kod Kreskowy"
@@ -196,29 +197,42 @@ msgstr "Skopiowano"
 msgid "Copy"
 msgstr "Kopiuj"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Drukuj etykietę"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "Wydrukuj"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Drukuj raport"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Drukuj etykietę"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "Wydrukuj"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Drukuj raport"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Akcje druku"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Drukuj etykiety"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Drukuj raporty"
 
@@ -307,6 +308,41 @@ msgstr "Tak"
 msgid "No"
 msgstr "Nie"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Mała ilość w magazynie"
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Oznacz jako przeczytane"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "Usunąć powiązany obrazek z tego elementu?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Usuń"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Wyczyść"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Zatwierdź"
 
@@ -715,7 +751,7 @@ msgstr "Przesłanie obrazu nie powiodło się"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "Błąd serwera"
 msgid "A server error occurred"
 msgstr "Wystąpił błąd serwera"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Błąd formularza"
 
@@ -904,19 +940,20 @@ msgstr "Błąd formularza"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "Istnieją błędy dla jednego lub więcej pól formularzy"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Aktualizuj"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Twoja nazwa użytkownika"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Hasło"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "Powtórz hasło"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "Rejestracja"
@@ -1097,6 +1134,7 @@ msgstr "Host"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "Wersja API"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Wtyczki"
@@ -1231,7 +1269,7 @@ msgstr "Szukaj"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Wczytuję"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "Importowanie wpisów"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Akcje kodów kreskowych"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Akcje kodów kreskowych"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Pokaż kod kreskowy"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Połącz Kod Kreskowy"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Odłącz własny kod kreskowy"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Edytuj"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "Edytuj element"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Usuń element"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "Wstrzymaj"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Zduplikuj"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Duplikuj pozycję"
 
@@ -1783,8 +1821,8 @@ msgstr "Ustawienia systemowe"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Centrum Admina"
 
@@ -1823,7 +1861,7 @@ msgstr "Komponenty"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "Stan"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "Zakupy"
 
@@ -1854,9 +1892,9 @@ msgstr "Zakupy"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Sprzedaże"
 
@@ -1883,8 +1921,8 @@ msgstr "Grupy"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Powiadomienia"
 
@@ -1900,12 +1938,12 @@ msgstr "Nawigacja"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "O nas"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "Oznacz wszystkie jako przeczytane"
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "Nieznany model: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Komponent"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "Część dostawcy"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "Części dostawcy"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr "Część Producenta"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "Części producenta"
 
@@ -2289,9 +2328,9 @@ msgstr "Element magazynowy"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "Elementy magazynowe"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "Lokacja stanu"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "Firmy"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "Kod projektu"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "Kody projektu"
 
@@ -2390,7 +2429,7 @@ msgstr "Zlecenie zakupu"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "Zlecenia zakupu"
 
@@ -2406,11 +2445,11 @@ msgstr "Pozycje zlecenia zakupu"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "Zlecenie sprzedaży"
@@ -2419,12 +2458,12 @@ msgstr "Zlecenie sprzedaży"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "Zlecenia Sprzedaży"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr "Właściciele"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr "Szablon etykiety"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "Szablony etykiet"
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr "Szablon Raportu"
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr "Szablony raportów"
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "Wysyłka"
 
@@ -2591,7 +2632,7 @@ msgstr "Nieaktywny"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "Brak w magazynie"
 
@@ -2600,7 +2641,7 @@ msgstr "Brak w magazynie"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Numer seryjny"
@@ -2611,10 +2652,10 @@ msgstr "Numer seryjny"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Ilość"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr "Dostosuj opakowanie"
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "Zmień status"
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr "Dodaj notatkę"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr "Kod partii"
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "Numery seryjne"
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr "Następny numer seryjny"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "Dodaj podaną ilość jako paczkę zamiast poszczególnych produktów"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "Wprowadź początkową ilość dla tego towaru"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "Wprowadź początkową ilość dla tego towaru"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "Wprowadź numery seryjne dla nowego stanu (lub pozostaw puste)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr "Dodaj element magazynowy"
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "Ładowanie..."
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr "Przenieś do domyślnej lokalizacji"
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "Przenieś"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "Przenieś"
 msgid "In Stock"
 msgstr "Na stanie"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Dodaj"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Ilość"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr "Dodaj stan"
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr "Usuń stan"
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "Przenieś stan"
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr "Policz stan"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr "Zmień status stanu magazynowego"
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "Element utworzony"
@@ -4289,11 +4351,19 @@ msgstr "Element utworzony"
 msgid "Item Updated"
 msgstr "Element zaktualizowany"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "Element został usunięty"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "Czy na pewno chcesz usunąć ten element?"
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "Sprawdzanie, czy jesteś już zalogowany"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "Brak wyboru"
 
@@ -4354,12 +4424,12 @@ msgstr "Brak wyboru"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "Zaloguj się"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "Nie masz konta?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
 msgid "Single Sign On"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
+msgstr "Wyłączone"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr "Wyłączone"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Ustawienia wyświetlania"
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
-msgstr "Zadania w tle"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr "Zadania w tle"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr "Raporty o błędach"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "Waluty"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "Jednostki niestandardowe"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "Parametry części"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "Jednostki niestandardowe"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "Parametry części"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr "Parametry kategorii"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,17 +5373,17 @@ msgstr "Maszyny"
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr "Opcje zaawansowane"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
+msgstr "Opcje zaawansowane"
+
 #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
-msgstr ""
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
 
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr "Błędy wtyczek"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "Kody kreskowe"
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr "Raportowanie"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr "Wyświetl opcje"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "Historia"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Strona internetowa"
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Wirtualny"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/pt/messages.po b/src/frontend/src/locales/pt/messages.po
index 6cf3323d9f..6d0e4ff51a 100644
--- a/src/frontend/src/locales/pt/messages.po
+++ b/src/frontend/src/locales/pt/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: pt\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Portuguese\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Ligação"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Desatribuir Código de Barras"
@@ -196,29 +197,42 @@ msgstr "Copiado"
 msgid "Copy"
 msgstr "Copiar"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Imprimir Etiqueta"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Imprimir Relatório"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Imprimir Etiqueta"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Imprimir Relatório"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Opções de Impressão"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Imprimir Etiquetas"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Imprimir Relatórios"
 
@@ -307,6 +308,41 @@ msgstr "Sim"
 msgid "No"
 msgstr "Não"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr "Em atraso"
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Estoque Baixo"
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Marcar como lida"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "Remover a imagem associada a este item?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Eliminar"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Apagar"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Enviar"
 
@@ -715,7 +751,7 @@ msgstr "Falha no carregamento da imagem"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -896,8 +932,8 @@ msgstr ""
 msgid "A server error occurred"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Erro de formulário"
 
@@ -905,19 +941,20 @@ msgstr "Erro de formulário"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Atualizar"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -995,7 +1032,7 @@ msgstr "O seu nome de utilizador"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Palavra-chave"
 
@@ -1070,7 +1107,7 @@ msgid "Repeat password"
 msgstr "Repetir senha"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "Registar"
@@ -1098,6 +1135,7 @@ msgstr "Servidor"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1168,7 +1206,7 @@ msgstr "Versão da API"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Extensões"
@@ -1232,7 +1270,7 @@ msgstr "Buscar"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "A carregar"
 
@@ -1426,7 +1464,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1434,65 +1472,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Ações de código de barras"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Ações de código de barras"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Ver código de barras"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Atribuir Código de Barras"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Desvincular código de barras personalizado"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Editar"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Apagar Item"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Duplicar"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Duplicar item"
 
@@ -1784,8 +1822,8 @@ msgstr "Definições de Sistema"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Centro de Administração"
 
@@ -1824,7 +1862,7 @@ msgstr "Peças"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1836,7 +1874,7 @@ msgstr "Estoque"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1847,7 +1885,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "Comprando"
 
@@ -1855,9 +1893,9 @@ msgstr "Comprando"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Vendas"
 
@@ -1884,8 +1922,8 @@ msgstr "Grupos"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Notificações"
 
@@ -1901,12 +1939,12 @@ msgstr "Navegação"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1917,7 +1955,7 @@ msgid "About"
 msgstr "Sobre"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1953,18 +1991,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr "Fornecedores"
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr "Fabricantes"
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "Clientes"
 
@@ -2059,8 +2097,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2093,12 +2131,13 @@ msgstr "Data"
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2199,24 +2238,24 @@ msgstr "Modelo desconhecido: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Peça"
@@ -2250,7 +2289,7 @@ msgid "Supplier Part"
 msgstr "Fornecedor da Peça"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "Peças de fornecedor"
 
@@ -2261,7 +2300,7 @@ msgid "Manufacturer Part"
 msgstr "Fabricante da peça"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "Peças do fabricante"
 
@@ -2290,9 +2329,9 @@ msgstr "Item de Estoque"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "Itens de Estoque"
@@ -2302,7 +2341,7 @@ msgid "Stock Location"
 msgstr "Localização de Stock"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2360,7 +2399,7 @@ msgid "Companies"
 msgstr "Empresas"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2371,7 +2410,7 @@ msgid "Project Code"
 msgstr "Código do projeto"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "Códigos do Projeto"
 
@@ -2391,7 +2430,7 @@ msgstr "Pedido de Compra"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "Pedidos de compra"
 
@@ -2407,11 +2446,11 @@ msgstr "Pedido de compra das linhas"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "Pedido de Venda"
@@ -2420,12 +2459,12 @@ msgstr "Pedido de Venda"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "Pedidos de vendas"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "Envio do Pedido de Venda"
 
@@ -2443,7 +2482,7 @@ msgstr "Pedido de Devolução"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "Pedidos de Devolução"
 
@@ -2492,7 +2531,11 @@ msgstr "Proprietários"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2522,8 +2565,7 @@ msgid "Label Template"
 msgstr "Modelo de Etiqueta"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "Modelos de Etiqueta"
 
@@ -2532,8 +2574,7 @@ msgid "Report Template"
 msgstr "Modelo de relatório"
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr "Modelos de relatório"
 
@@ -2577,7 +2618,7 @@ msgstr "Erros"
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "Envios"
 
@@ -2592,7 +2633,7 @@ msgstr "Inativo"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "Sem Estoque"
 
@@ -2601,7 +2642,7 @@ msgstr "Sem Estoque"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Número de Série"
@@ -2612,10 +2653,10 @@ msgstr "Número de Série"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2636,14 +2677,14 @@ msgstr "Quantidade"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr "Lote"
@@ -3133,7 +3174,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3611,7 +3652,7 @@ msgstr "Saída da Produção"
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3625,7 +3666,7 @@ msgstr "Saída da Produção"
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3673,7 +3714,7 @@ msgstr "Alocado"
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr "Localização de Origem"
 
@@ -3705,8 +3746,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3780,12 +3821,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "Alterar Estado"
 
@@ -3794,14 +3835,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3827,13 +3868,13 @@ msgid "Store with already received stock"
 msgstr "Armazenar com estoque já recebido"
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr "Código de Lote"
@@ -3843,7 +3884,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "Números de Série"
 
@@ -3866,7 +3907,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3923,60 +3964,60 @@ msgstr "Próximo número de série"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "Adicionar quantidade dada como pacotes em vez de itens individuais"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "Digite a quantidade inicial para este item de estoque"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "Digite a quantidade inicial para este item de estoque"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "Insira os números de série para novo estoque (ou deixe em branco)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr "Estado do Estoque"
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr "Adicionar item de Estoque"
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "A carregar..."
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr "Mover para o local padrão"
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "Mover"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3986,50 +4027,50 @@ msgstr "Mover"
 msgid "In Stock"
 msgstr "Em Estoque"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Adicionar"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Contar"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr "Adicionar Estoque"
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr "Remover Estoque"
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "Transferir Estoque"
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4038,44 +4079,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr "Contar Estoque"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr "Alterar estado do Estoque"
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr "Mesclar Estoque"
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr "Excluir Itens de Estoque"
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr "Localização parente de Estoque"
 
@@ -4088,7 +4129,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4282,6 +4323,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "Item Criado"
@@ -4290,11 +4352,19 @@ msgstr "Item Criado"
 msgid "Item Updated"
 msgstr "Item Atualizado"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "Item Eliminado"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "Tem certeza de que deseja excluir este item?"
 
@@ -4343,7 +4413,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "Verificando se você já fez login"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "Nenhuma seleção"
 
@@ -4355,12 +4425,12 @@ msgstr "Nenhuma seleção"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "Iniciar sessão"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "Não possui conta?\n"
 
@@ -4373,12 +4443,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4871,7 +4941,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4928,31 +4998,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
 msgid "Single Sign On"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
+msgstr "Não habilitado"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr "Não habilitado"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr "Acesso único não está habilitado para este servidor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4960,65 +5030,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "Os seguintes endereços de e-mail estão associados à sua conta:"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "Primário"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "Verificado"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "Não verificado"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "Tornar Primária"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr "Reenviar Verificação"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "Adicionar Endereço de Email"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "E-mail"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "Endereço de E-mail"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "Adicionar Email"
 
@@ -5038,76 +5108,76 @@ msgstr "Adicionar Email"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5115,30 +5185,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Definições de Exibição"
@@ -5252,65 +5302,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
-msgstr "Tarefas em segundo plano"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr "Tarefas em segundo plano"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr "Relatórios de Erros"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "Moedas"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "Unidades Personalizadas"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "Parâmetros da Peça"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "Unidades Personalizadas"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "Parâmetros da Peça"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr "Parâmetros de Categoria"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr "Balanço"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5320,17 +5374,17 @@ msgstr "Máquinas"
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr "Opções Avançadas"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
+msgstr "Opções Avançadas"
+
 #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
-msgstr ""
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
 
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
@@ -5393,21 +5447,21 @@ msgstr "Extensões externas não estão ativados para esta instalação do Inven
 msgid "Plugin Errors"
 msgstr "Erros de Extensão"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5488,6 +5542,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "Códigos de barras"
@@ -5518,7 +5576,7 @@ msgid "Reporting"
 msgstr "Relatórios"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5557,20 +5615,20 @@ msgstr "Opções de Exibição"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "Eliminar notificações"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "Histórico"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "Marcar como não lido"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5585,9 +5643,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5644,17 +5702,43 @@ msgstr "Responsável"
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr "Criado"
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
+#: src/pages/build/BuildDetail.tsx:196
+#: src/pages/part/PartDetail.tsx:280
+#~ msgid "Unlink custom barcode from part"
+#~ msgstr "Unlink custom barcode from part"
+
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr "Qualquer localização"
+
+#: src/pages/build/BuildDetail.tsx:202
+#~ msgid "Build Order updated"
+#~ msgstr "Build Order updated"
+
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
+msgstr "Local de Destino"
+
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
+msgstr "Criado"
+
+#: src/pages/build/BuildDetail.tsx:221
+#~ msgid "Edit build order"
+#~ msgstr "Edit build order"
+
+#: src/pages/build/BuildDetail.tsx:226
+#~ msgid "Duplicate build order"
+#~ msgstr "Duplicate build order"
+
+#: src/pages/build/BuildDetail.tsx:229
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:255
 #: src/pages/sales/ReturnOrderDetail.tsx:220
 #: src/pages/sales/SalesOrderDetail.tsx:231
@@ -5662,16 +5746,11 @@ msgstr "Criado"
 msgid "Start Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:196
-#: src/pages/part/PartDetail.tsx:280
-#~ msgid "Unlink custom barcode from part"
-#~ msgstr "Unlink custom barcode from part"
+#: src/pages/build/BuildDetail.tsx:231
+#~ msgid "Delete build order"
+#~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:202
-#~ msgid "Build Order updated"
-#~ msgstr "Build Order updated"
-
-#: src/pages/build/BuildDetail.tsx:203
+#: src/pages/build/BuildDetail.tsx:237
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:263
 #: src/pages/sales/ReturnOrderDetail.tsx:228
 #: src/pages/sales/SalesOrderDetail.tsx:239
@@ -5682,31 +5761,11 @@ msgstr ""
 msgid "Target Date"
 msgstr "Data alvo"
 
-#: src/pages/build/BuildDetail.tsx:211
+#: src/pages/build/BuildDetail.tsx:245
 #: src/tables/sales/SalesOrderLineItemTable.tsx:303
 msgid "Completed"
 msgstr "Concluído"
 
-#: src/pages/build/BuildDetail.tsx:221
-#~ msgid "Edit build order"
-#~ msgstr "Edit build order"
-
-#: src/pages/build/BuildDetail.tsx:226
-#~ msgid "Duplicate build order"
-#~ msgstr "Duplicate build order"
-
-#: src/pages/build/BuildDetail.tsx:231
-#~ msgid "Delete build order"
-#~ msgstr "Delete build order"
-
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
-msgstr "Qualquer localização"
-
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
-msgstr "Local de Destino"
-
 #: src/pages/build/BuildDetail.tsx:276
 msgid "Build Details"
 msgstr "Detalhes da Produção"
@@ -5728,7 +5787,7 @@ msgstr "Saídas Incompletas"
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5764,8 +5823,8 @@ msgid "Edit Build Order"
 msgstr "Editar Pedido de Produção"
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr "Novo Pedido de Produção"
 
@@ -5903,6 +5962,20 @@ msgstr "Ordem de Produção"
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Site"
@@ -5947,7 +6020,7 @@ msgstr "Fabricante"
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6069,7 +6142,7 @@ msgstr "Quantidade embalada"
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr "No Pedido"
 
@@ -6164,8 +6237,8 @@ msgstr "Sub-categorias"
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr "Estrutural"
 
@@ -6183,7 +6256,7 @@ msgstr "Categoria da peça de nível superior"
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr "Editar Categoria da Peça"
 
@@ -6218,6 +6291,7 @@ msgid "Action for child categories in this category"
 msgstr "Ações para Caregorias Filhas nesta Categoria"
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr "Ações da Categoria"
 
@@ -6227,13 +6301,13 @@ msgstr "Detalhes da Categoria"
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr "Alocações de Pedido de Produção"
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr "Alocações do Pedido de Vendas"
 
@@ -6251,7 +6325,7 @@ msgid "Revision"
 msgstr "Revisão"
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6278,7 +6352,7 @@ msgstr "Palavras-chave"
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr "Estoque Disponível"
@@ -6338,7 +6412,7 @@ msgstr "Em Produção"
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6382,14 +6456,12 @@ msgstr "Peça virtual"
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr "Data de Criação"
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr "Criado por"
 
@@ -6400,7 +6472,7 @@ msgstr "Fornecedor Padrão"
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr "Intervalo de Preço"
 
@@ -6449,7 +6521,7 @@ msgstr "Peças Relacionadas"
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6466,8 +6538,8 @@ msgid "Edit Part"
 msgstr "Editar Peça"
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr "Adicionar Peça"
 
@@ -6494,7 +6566,7 @@ msgid "Transfer part stock"
 msgstr "Transferir peça do estoque"
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6506,7 +6578,7 @@ msgid "Order Stock"
 msgstr "Encomendar Estoque"
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr "Ações da Peça"
 
@@ -6556,36 +6628,36 @@ msgstr "Preço de Venda"
 msgid "Sale History"
 msgstr "Histórico de Venda"
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr "Máximo"
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr "Mínimo"
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6601,42 +6673,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr "Valor Mínimo"
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr "Valor Máximo"
@@ -6658,7 +6730,7 @@ msgstr "Preço Total"
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "Componente"
 
@@ -6895,7 +6967,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6936,7 +7008,7 @@ msgstr "Ações do Pedido"
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr "Referência do Cliente"
@@ -7026,36 +7098,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr "Data de Envio"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7063,45 +7135,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7114,12 +7186,12 @@ msgid "Sublocations"
 msgstr "Sub-locais"
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr "Externos"
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr "Tipo de Localização"
 
@@ -7137,7 +7209,7 @@ msgstr "Peças padrão"
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr "Editar Local de Estoque"
 
@@ -7167,6 +7239,7 @@ msgid "Action for child locations in this location"
 msgstr "Ação para locais filhos nesta localização"
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr "Ações de localização"
 
@@ -7377,28 +7450,28 @@ msgstr "Selecionar Colunas"
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr "Excel (.xlsx)"
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr "Descarregar dados"
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7413,7 +7486,7 @@ msgid "Show orders assigned to me"
 msgstr "Mostrar pedidos atribuídos a mim"
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr "Pendente"
 
@@ -7421,10 +7494,6 @@ msgstr "Pendente"
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr "Em atraso"
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7531,6 +7600,7 @@ msgid "Filter by responsible owner"
 msgstr "Filtrar pelo proprietário responsável"
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7543,6 +7613,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "Remover filtro"
@@ -7561,16 +7635,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "Selecionar filtro"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "Filtro"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr "Filtros de tabela"
 
@@ -7634,29 +7708,37 @@ msgstr "O servidor retornou dados incorretos"
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr "Remover registos selecionados"
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr "Atualizar dados"
 
@@ -7678,7 +7760,7 @@ msgstr "Informação da Peça"
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr "Estoque externo"
 
@@ -7694,12 +7776,12 @@ msgid "Includes variant stock"
 msgstr "Inclui estoque variante"
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr "Produzindo"
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7816,7 +7898,7 @@ msgid "Show consumable items"
 msgstr "Mostrar itens consumíveis"
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr "Tem Preço"
 
@@ -7895,7 +7977,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr "Montagem"
@@ -7905,7 +7987,7 @@ msgid "Show active assemblies"
 msgstr "Mostrar montagens ativas"
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr "Rastreável"
@@ -7923,21 +8005,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr "Incluir variantes"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7946,17 +8028,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7999,7 +8081,7 @@ msgid "Show optional lines"
 msgstr "Mostrar itens opcionais"
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8114,38 +8196,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8666,32 +8744,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr "Incluir Subcategorias"
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr "Incluir subcategorias nos resultados"
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr "Mostrar categorias estruturais"
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr "Nova Categoria de Peça"
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr "Adicionar Categoria de Peça"
 
@@ -8754,7 +8845,7 @@ msgid "Show templates with choices"
 msgstr "Mostrar modelos com escolhas"
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr "Possui unidades"
 
@@ -8796,145 +8887,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr "Stock mínimo"
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr "Filtrar por estado ativo da peça"
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr "Filtrar por atributo de montagem"
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr "Incluir peças nas subcategorias"
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr "Filtrar por atributo do componente"
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr "Filtrar por atributo rastreável"
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr "Filtrar por peças que têm unidades"
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr "Possui IPN"
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr "Filtrar por peças que tenham um IPN"
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr "Possui estoque"
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr "Mostrar peças que têm estoque"
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr "Filtrar po peças que têm estoque baixo"
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr "Adquirível"
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr "Filtrar por peças que são adquiríveis"
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr "Vendível"
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr "Filtrar por peças que são vendíveis"
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Virtual"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr "Filtrar por peças que são virtuais"
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr "Não é Virtual"
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9028,7 +9128,6 @@ msgid "Show active variants"
 msgstr "Mostrar variantes ativas"
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr "Modelo"
 
@@ -9091,7 +9190,7 @@ msgid "Plugin is not installed"
 msgstr "Extensão não está instalada"
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr "Extensão"
 
@@ -9439,37 +9538,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9507,38 +9614,85 @@ msgstr "Encomendar Estoque"
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9660,6 +9814,14 @@ msgstr "Relatório de erro excluído"
 msgid "Error Details"
 msgstr "Detalhes do Erro"
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9726,7 +9888,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9734,18 +9896,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr "Tipo de Modelo"
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr "Filtrar pelo destino do tipo de modelo"
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9847,8 +10008,8 @@ msgid "Filter by enabled status"
 msgstr "Filtrar por estado ativo"
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10026,7 +10187,7 @@ msgid "Show items which are available"
 msgstr "Mostrar itens que estão disponíveis"
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr "Incluir sublocações"
 
@@ -10316,39 +10477,47 @@ msgstr "Mostrar apenas testes aprovados"
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr "Incluir sublocações nos resultados"
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
-msgstr "Mostrar localizações estruturais"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
+msgstr "Incluir sublocações nos resultados"
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr "Mostrar localizações estruturais"
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr "Mostrar localizações externas"
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr "Possui tipo de localização"
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr "Adicionar Local de Estoque"
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr "Adicionado"
diff --git a/src/frontend/src/locales/pt_BR/messages.po b/src/frontend/src/locales/pt_BR/messages.po
index fb4c3729db..9788eb8d96 100644
--- a/src/frontend/src/locales/pt_BR/messages.po
+++ b/src/frontend/src/locales/pt_BR/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: pt\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Portuguese, Brazilian\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -94,12 +94,13 @@ msgstr "Digitalizar ou inserir dados com código de barras"
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr "Falha ao escanear código de barras"
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Link"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr "Isto irá remover o link com o código de barras associado"
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Desvincular Código de Barras"
@@ -196,29 +197,42 @@ msgstr "Copiada"
 msgid "Copy"
 msgstr "Copiar"
 
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
+msgstr "Imprimir Etiquetas"
+
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
+msgstr "Imprimir Relatórios"
+
 #: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
-msgstr "Impressão"
+#~ msgid "Printing"
+#~ msgstr "Printing"
 
 #: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
-msgstr "Impressão de etiqueta finalizada com sucesso"
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
 
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Imprimir etiqueta"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr "Imprimir Etiquetas"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "Imprimir"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr "Imprimir Relatórios"
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Imprimir Relatório"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr "Imprimir Relatórios"
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Imprimir etiqueta"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "Imprimir"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Imprimir Relatório"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Ações de Impressão"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Imprimir Etiquetas"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Imprimir Relatórios"
 
@@ -307,6 +308,41 @@ msgstr "Sim"
 msgid "No"
 msgstr "Não"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr "Em atraso"
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr "Nenhum Widget Selecionado"
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Estoque Baixo"
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Marcar como lido"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "Remover imagem associada a este item?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Remover"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Limpar"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Enviar"
 
@@ -715,7 +751,7 @@ msgstr "Upload da imagem falhou"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "Erro de servidor"
 msgid "A server error occurred"
 msgstr "Ocorreu um erro no servidor"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Erro no formulário"
 
@@ -904,19 +940,20 @@ msgstr "Erro no formulário"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "Existem erros para um ou mais campos de formulário"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Atualizar"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Seu nome de usuário"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Senha"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "Repita a senha"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "Registrar"
@@ -1097,6 +1134,7 @@ msgstr "Servidor"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "Versão da API"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Extensões"
@@ -1231,7 +1269,7 @@ msgstr "Buscar"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Carregando"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "Importação de Registros"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr "Linhas Importadas"
 
@@ -1433,65 +1471,65 @@ msgstr "Linhas Importadas"
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr "Opções"
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Ações de código de barras"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Ações de código de barras"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr "Ver código de barras"
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Ver código de barras"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Vincular Código de Barras"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr "Vincular um código de barras personalizado para este item"
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Desvincular código de barras personalizado"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Editar"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "Editar item"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Apagar item"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "Aguarde"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Duplicar"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Duplicar item"
 
@@ -1783,8 +1821,8 @@ msgstr "Configurações do Sistema"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Centro de Administração"
 
@@ -1823,7 +1861,7 @@ msgstr "Peças"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "Estoque"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "Comprando"
 
@@ -1854,9 +1892,9 @@ msgstr "Comprando"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Vendas"
 
@@ -1883,8 +1921,8 @@ msgstr "Grupos"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Notificações"
 
@@ -1900,12 +1938,12 @@ msgstr "Navegação"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "Sobre"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "Marcar tudo como lido"
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr "Fornecedores"
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr "Fabricantes"
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "Clientes"
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr "Data"
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "Modelo desconhecido: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Peça"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "Fornecedor da Peça"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "Peças do Fornecedor"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr "Fabricante da peça"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "Peças do Fabricante"
 
@@ -2289,9 +2328,9 @@ msgstr "Item de estoque"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "Itens de Estoque"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "Localização do estoque"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "Empresas"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "Código do Projeto"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "Códigos de Projeto"
 
@@ -2390,7 +2429,7 @@ msgstr "Pedido de Compra"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "Pedidos de compra"
 
@@ -2406,11 +2445,11 @@ msgstr "Linhas do Pedido de Compra"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "Pedido de Venda"
@@ -2419,12 +2458,12 @@ msgstr "Pedido de Venda"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "Pedidos de vendas"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "Envio do Pedido Venda"
 
@@ -2442,7 +2481,7 @@ msgstr "Pedido de Devolução"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "Pedidos de Devolução"
 
@@ -2491,7 +2530,11 @@ msgstr "Proprietários"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr "Modelo de Etiqueta"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "Modelos de Etiqueta"
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr "Modelo de Relatório"
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr "Modelos de Relatório"
 
@@ -2576,7 +2617,7 @@ msgstr "Erros"
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "Remessa"
 
@@ -2591,7 +2632,7 @@ msgstr "Inativo"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "Sem Estoque"
 
@@ -2600,7 +2641,7 @@ msgstr "Sem Estoque"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Número de Série"
@@ -2611,10 +2652,10 @@ msgstr "Número de Série"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Quantidade"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr "Lote"
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr "Saída da Produção"
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr "Saída da Produção"
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr "Alocado"
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr "Local de Origem"
 
@@ -3704,8 +3745,8 @@ msgstr "Itens de estoque alocados"
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr "Inscrito"
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr "Ajustar Pacotes"
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "Alterar Status"
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr "Adicionar observação"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr "Armazenar com estoque já recebido"
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr "Código de Lote"
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "Números de Série"
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr "Próximo número de série"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "Adicionar quantidade dada como pacotes e não itens individuais"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "Inserir quantidade inicial deste item de estoque"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "Inserir quantidade inicial deste item de estoque"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "Insira o número de série para novo estoque (ou deixe em branco)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr "Situação do Estoque"
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr "Adicionar Item do Estoque"
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "Carregando..."
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr "Mover para o local padrão"
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "Mover"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "Mover"
 msgid "In Stock"
 msgstr "Em Estoque"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Adicionar"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Contar"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr "Adicionar Estoque"
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr "Remover Estoque"
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "Transferir Estoque"
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr "Contar Estoque"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr "Mudar estado do estoque"
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr "Mesclar estoque"
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr "Excluir Item de Estoque"
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr "Local de estoque pai"
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "Item Criado"
@@ -4289,11 +4351,19 @@ msgstr "Item Criado"
 msgid "Item Updated"
 msgstr "Item Atualizado"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "Item Excluído"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "Tem certeza que deseja remover este item?"
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "Checando se você já está conectado"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "Nada selecionado"
 
@@ -4354,12 +4424,12 @@ msgstr "Nada selecionado"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "Entrar"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "Não possui uma conta?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
 msgid "Single Sign On"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
+msgstr "Não habilitado"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr "Não habilitado"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr "Contas de Login Único (SSO) não estão habilitadas neste servidor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "Os seguintes endereços de e-mail estão associados à sua conta:"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "Principal"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "Verificado"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "Não Verificado"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "Tornar Principal"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr "Reenviar Verificação"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "Adicionar E-mail"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "E-mail"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "Endereço de e-mail"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "Adicionar E-mail"
 
@@ -5037,76 +5107,76 @@ msgstr "Adicionar E-mail"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr "Revogar"
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Configurações de tela"
@@ -5251,65 +5301,69 @@ msgstr "Última busca"
 msgid "Base currency"
 msgstr "Moeda base"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr "Importador de dados"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
-msgstr "Tarefas de segundo plano"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr "Tarefas de segundo plano"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr "Relatórios de Erro"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "Moedas"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr "Estados personalizados"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "Unidades personalizadas"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "Parâmetros da Peça"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "Unidades personalizadas"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "Parâmetros da Peça"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr "Parâmetros de Categoria"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr "Balanço"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr "Tipo de Localização"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,17 +5373,17 @@ msgstr "Máquinas"
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr "Opções Avançadas"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
+msgstr "Opções Avançadas"
+
 #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
-msgstr ""
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
 
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
@@ -5392,21 +5446,21 @@ msgstr "Extensões externas não estão ativados para esta instalação do Inven
 msgid "Plugin Errors"
 msgstr "Erros de plugin"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr "Tamanho da página"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr "Paisagem"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr "Anexar ao Modelo"
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr "Todas as unidades"
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "Códigos de barras"
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr "Relatórios"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr "Opções de exibição"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "Apagar notificações"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "Histórico"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "Marcar como não lido"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,17 +5701,43 @@ msgstr "Responsável"
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr "Criado"
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
+#: src/pages/build/BuildDetail.tsx:196
+#: src/pages/part/PartDetail.tsx:280
+#~ msgid "Unlink custom barcode from part"
+#~ msgstr "Unlink custom barcode from part"
+
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr "Qualquer local"
+
+#: src/pages/build/BuildDetail.tsx:202
+#~ msgid "Build Order updated"
+#~ msgstr "Build Order updated"
+
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
+msgstr "Local de Destino"
+
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
+msgstr "Criado"
+
+#: src/pages/build/BuildDetail.tsx:221
+#~ msgid "Edit build order"
+#~ msgstr "Edit build order"
+
+#: src/pages/build/BuildDetail.tsx:226
+#~ msgid "Duplicate build order"
+#~ msgstr "Duplicate build order"
+
+#: src/pages/build/BuildDetail.tsx:229
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:255
 #: src/pages/sales/ReturnOrderDetail.tsx:220
 #: src/pages/sales/SalesOrderDetail.tsx:231
@@ -5661,16 +5745,11 @@ msgstr "Criado"
 msgid "Start Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:196
-#: src/pages/part/PartDetail.tsx:280
-#~ msgid "Unlink custom barcode from part"
-#~ msgstr "Unlink custom barcode from part"
+#: src/pages/build/BuildDetail.tsx:231
+#~ msgid "Delete build order"
+#~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:202
-#~ msgid "Build Order updated"
-#~ msgstr "Build Order updated"
-
-#: src/pages/build/BuildDetail.tsx:203
+#: src/pages/build/BuildDetail.tsx:237
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:263
 #: src/pages/sales/ReturnOrderDetail.tsx:228
 #: src/pages/sales/SalesOrderDetail.tsx:239
@@ -5681,31 +5760,11 @@ msgstr ""
 msgid "Target Date"
 msgstr "Data Prevista"
 
-#: src/pages/build/BuildDetail.tsx:211
+#: src/pages/build/BuildDetail.tsx:245
 #: src/tables/sales/SalesOrderLineItemTable.tsx:303
 msgid "Completed"
 msgstr "Concluído"
 
-#: src/pages/build/BuildDetail.tsx:221
-#~ msgid "Edit build order"
-#~ msgstr "Edit build order"
-
-#: src/pages/build/BuildDetail.tsx:226
-#~ msgid "Duplicate build order"
-#~ msgstr "Duplicate build order"
-
-#: src/pages/build/BuildDetail.tsx:231
-#~ msgid "Delete build order"
-#~ msgstr "Delete build order"
-
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
-msgstr "Qualquer local"
-
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
-msgstr "Local de Destino"
-
 #: src/pages/build/BuildDetail.tsx:276
 msgid "Build Details"
 msgstr "Detalhes da Produção"
@@ -5727,7 +5786,7 @@ msgstr "Saídas Incompletas"
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr "Estoque Alocado"
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr "Editar Pedido de Produção"
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr "Adicionar Pedido de Produção"
 
@@ -5902,6 +5961,20 @@ msgstr "Ondem de Produção"
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Página Web"
@@ -5946,7 +6019,7 @@ msgstr "Fabricante"
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr "Quantidade de embalagens"
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr "No pedido"
 
@@ -6163,8 +6236,8 @@ msgstr "Sub-categorias"
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr "Estrutural"
 
@@ -6182,7 +6255,7 @@ msgstr "Categoria de peça de nível superior"
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr "Editar Categoria da Peça"
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr "Ação para categorias filhas desta categoria"
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr "Ações de Categoria"
 
@@ -6226,13 +6300,13 @@ msgstr "Detalhes da categoria"
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr "Alocações de Pedido de Produção"
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr "Alocações do Pedido de Vendas"
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr "Revisão"
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr "Palavras-chave"
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr "Estoque Disponível"
@@ -6337,7 +6411,7 @@ msgstr "Em Produção"
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr "Bloqueado"
 
@@ -6381,14 +6455,12 @@ msgstr "Parte Virtual"
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr "Criado em"
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr "Criado por"
 
@@ -6399,7 +6471,7 @@ msgstr "Fornecedor Padrão"
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr "Faixa de Preço"
 
@@ -6448,7 +6520,7 @@ msgstr "Peças Relacionadas"
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr "Editar Peça"
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr "Adicionar Parte"
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr "Transferir estoque de peça"
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr "Pedir estoque"
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr "Ações da Peça"
 
@@ -6555,36 +6627,36 @@ msgstr "Preço de Venda"
 msgid "Sale History"
 msgstr "Histórico de Vendas"
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr "Máximo"
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr "Mínimo"
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr "Valor mínimo"
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr "Valor máximo"
@@ -6657,7 +6729,7 @@ msgstr "Preço Total"
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "Componente"
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr "Ações de Pedido"
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr "Referência do Cliente"
@@ -7025,36 +7097,36 @@ msgstr "Concluir Pedido de Venda"
 msgid "Ship Order"
 msgstr "Ordem de envio"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr "Referência de Remessa"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr "Data de envio"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr "Data de Entrega"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr "Editar Remessa"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr "Remessa Completa"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr "Pendentes"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr "Enviado"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr "Entregue"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr "Sub-locais"
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr "Externo"
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr "Tipo de Localização"
 
@@ -7136,7 +7208,7 @@ msgstr "Peças Padrão"
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr "Editar Local de Estoque"
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr "Ação para localizações filhas deste local"
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr "Ações de Localização"
 
@@ -7376,28 +7449,28 @@ msgstr "Selecionar Colunas"
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr "Excel"
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr "Baixar dados"
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr "Mostrar pedidos atribuídos a mim"
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr "Pendente"
 
@@ -7420,10 +7493,6 @@ msgstr "Pendente"
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr "Em atraso"
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr "Filtrar pelo proprietário responsável"
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr "Filtrar por usuário"
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "Remover filtro"
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "Selecionar filtro"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "Filtro"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr "Filtros da Tabela"
 
@@ -7633,29 +7707,37 @@ msgstr "O servidor retornou um tipo de dado incorreto"
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr "Apagar itens selecionados"
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr "Você tem certeza que quer apagar os itens selecionados?"
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr "Remover registros selecionados"
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr "Atualizar dados"
 
@@ -7677,7 +7759,7 @@ msgstr "Informação da Peça"
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr "Estoque externo"
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr "Incluir estoque de variantes"
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr "Produzindo"
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr "Mostrar itens consumíveis"
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr "Tem Preço"
 
@@ -7894,7 +7976,7 @@ msgstr "A lista de materiais não pode ser editada, pois está bloqueada"
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr "Montagem"
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr "Mostrar montagens ativas"
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr "Rastreável"
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr "Mostrar itens alocados a uma saída da compilação"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr "Incluir Variantes"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr "Situação do pedido"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr "Quantidade Alocada"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr "Quantidade Disponível"
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr "Mostrar linhas opcionais"
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr "Testável"
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr "Incluir Subcategorias"
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr "Incluir subcategorias nos resultados"
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr "Mostrar categorias estruturais"
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr "Mostrar categorias nas quais o usuário está inscrito"
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr "Nova Categoria de Peça"
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr "Adicionar Categoria de Peça"
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr "Mostrar modelos com escolhas"
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr "Possui unidades"
 
@@ -8795,145 +8886,154 @@ msgstr "Mostrar itens recebidos"
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr "Estoque mínimo"
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr "Filtrar por peça em estado ativo"
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr "Filtrar por status de peça bloqueada"
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr "Filtrar por atributo de montagem"
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr "Incluir peças em subcategorias"
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr "Filtrar por atributo do componente"
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr "Filtrar por atributo testável"
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr "Filtrar por atributo rastreável"
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr "Filtrar por peças que têm unidades"
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr "Tem IPN"
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr "Filtrar por partes que tenham um número de peça interna"
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr "Tem estoque"
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr "Filtrar por peças que têm estoque"
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr "Filtrar por peças que tenham estoque baixo"
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr "Comprável"
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr "Filtrar por peças que são compráveis"
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr "Vendível"
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr "Filtrar por peças que são vendíveis"
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Virtual"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr "Filtrar por peças que são virtuais"
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr "Não é Virtual"
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr "É um modelo"
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr "Filtrar por partes que são modelos"
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr "É Revisão"
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr "Filtrar por partes que estão revisões"
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr "Possui revisão"
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr "Filtrar por partes que tenham revisões"
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr "Filtrar por peças que tenham informações de preços"
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr "Filtrar por peças que tenham estoque disponível"
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr "Filtrar por partes em que o usuário está inscrito"
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr "Tem Estoque"
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr "Filtrar por peças que tenham informações sobre estoques"
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr "Mostrar variantes ativos"
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr "Modelo"
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr "Plugin não está instalado"
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr "Plugin"
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr "Receber Item"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr "Alocar números de série"
@@ -9506,38 +9613,85 @@ msgstr "Encomendar estoque"
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr "Criar Remessa"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr "Itens"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr "Adicionar Remessa"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr "Revogar"
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr "Relatório de erro excluído"
 msgid "Error Details"
 msgstr "Detalhes do Erro"
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr "Excluir sessão de importação"
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr "Criar sessão de importação"
 
@@ -9733,18 +9895,17 @@ msgstr "Criar sessão de importação"
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr "Tipo de Modelo"
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr "Mostrar itens que estão disponíveis"
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr "Incluir Sublocais"
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr "Incluir sublocais nos resultados"
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
-msgstr "Mostrar locais estruturais"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
+msgstr "Incluir sublocais nos resultados"
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr "Mostrar locais estruturais"
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr "Mostrar locais externos"
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr "Tem Tipo de localização"
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr "Adicionar Local de Estoque"
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr "Adicionado"
diff --git a/src/frontend/src/locales/ro/messages.po b/src/frontend/src/locales/ro/messages.po
index 4f052f7a22..2753194df6 100644
--- a/src/frontend/src/locales/ro/messages.po
+++ b/src/frontend/src/locales/ro/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: ro\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Romanian\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr ""
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr ""
@@ -196,28 +197,41 @@ msgstr ""
 msgid "Copy"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr ""
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
 msgstr ""
 
 #: src/components/buttons/PrintingActions.tsx:152
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr ""
 
@@ -307,6 +308,41 @@ msgstr ""
 msgid "No"
 msgstr ""
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr ""
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr ""
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr ""
 
@@ -715,7 +751,7 @@ msgstr ""
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr ""
 msgid "A server error occurred"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr ""
 
@@ -904,19 +940,20 @@ msgstr ""
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr ""
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr ""
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr ""
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr ""
@@ -1097,6 +1134,7 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr ""
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr ""
@@ -1231,7 +1269,7 @@ msgstr ""
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr ""
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr ""
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr ""
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr ""
 
@@ -1783,8 +1821,8 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr ""
 
@@ -1823,7 +1861,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr ""
 
@@ -1854,9 +1892,9 @@ msgstr ""
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr ""
 
@@ -1883,8 +1921,8 @@ msgstr ""
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr ""
 
@@ -1900,12 +1938,12 @@ msgstr ""
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr ""
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr ""
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr ""
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr ""
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr ""
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr ""
 
@@ -2390,7 +2429,7 @@ msgstr ""
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2406,11 +2445,11 @@ msgstr ""
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr ""
@@ -2419,12 +2458,12 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr ""
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr ""
 
@@ -2591,7 +2632,7 @@ msgstr ""
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr ""
 
@@ -2600,7 +2641,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr ""
@@ -2611,10 +2652,10 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr ""
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr ""
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr ""
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr ""
 msgid "In Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr ""
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr ""
 
@@ -4354,12 +4424,12 @@ msgstr ""
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr ""
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr ""
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr ""
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr ""
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/ru/messages.po b/src/frontend/src/locales/ru/messages.po
index bdade002ed..1c768098f5 100644
--- a/src/frontend/src/locales/ru/messages.po
+++ b/src/frontend/src/locales/ru/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: ru\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Russian\n"
 "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Ссылка"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr "Это удалит ссылку на связанный штрих-код"
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Отвязать штрих-код"
@@ -196,29 +197,42 @@ msgstr "Скопировано"
 msgid "Copy"
 msgstr "Копировать"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Печать этикеток"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "Печать"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Печать отчета"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Печать этикеток"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "Печать"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Печать отчета"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Действия печати"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Печать этикеток"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Печать отчетов"
 
@@ -307,6 +308,41 @@ msgstr "Да"
 msgid "No"
 msgstr "Нет"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr "Виджеты не выбраны"
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Низкий запас"
 
@@ -545,7 +581,7 @@ msgstr "Сменить язык интерфейса"
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Пометить как прочитанное"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "Удалить связанное изображение?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Удалить"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Очистить"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Подтвердить"
 
@@ -715,7 +751,7 @@ msgstr "Не удалось загрузить изображение"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "Ошибка сервера"
 msgid "A server error occurred"
 msgstr "Произошла ошибка сервера"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Ошибка формы"
 
@@ -904,19 +940,20 @@ msgstr "Ошибка формы"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "Существуют ошибки для одного или нескольких полей формы"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Обновить"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Имя пользователя"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Пароль"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "Введите пароль еще раз"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "Регистрация"
@@ -1097,6 +1134,7 @@ msgstr "Узел"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "Версия API"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Плагины"
@@ -1231,7 +1269,7 @@ msgstr "Поиск"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Загрузка"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "Импорт записей"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr "Опции"
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Действия со штрихкодом"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Действия со штрихкодом"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr "Показать штрихкод"
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Показать штрихкод"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Привязать штрих-код"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr "Привязать индивидуальный штрих-код к этому предмету."
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Отвязать пользовательский штрих-код"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Изменить"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "Редактирование товара"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Удалить элемент"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "Удерживать"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Дублировать"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Дублировать элемент"
 
@@ -1783,8 +1821,8 @@ msgstr "Системные настройки"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Админ центр"
 
@@ -1823,7 +1861,7 @@ msgstr "Детали"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "Остатки"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr "Производство"
 
@@ -1846,7 +1884,7 @@ msgstr "Производство"
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "Покупка"
 
@@ -1854,9 +1892,9 @@ msgstr "Покупка"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Продажи"
 
@@ -1883,8 +1921,8 @@ msgstr "Группы"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Уведомления"
 
@@ -1900,12 +1938,12 @@ msgstr "Панель навигации"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "О проекте"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "Пометить как прочитанное"
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr "Информация о плагине"
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "Неизвестная модель: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Товар"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "Товар поставщика"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "Детали поставщиков"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr "Товар производителя"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "Детали производителей"
 
@@ -2289,9 +2328,9 @@ msgstr "На складе"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "Складские позиции"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "Место хранения"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "Компании"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "Код проекта"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "Коды проекта"
 
@@ -2390,7 +2429,7 @@ msgstr "Заказ на закупку"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "Заказы на закупку"
 
@@ -2406,11 +2445,11 @@ msgstr "Позиции заказа на поставку"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "Заказ на продажу"
@@ -2419,12 +2458,12 @@ msgstr "Заказ на продажу"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "Заказы на продажу"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "Отправка заказа на продажу"
 
@@ -2442,7 +2481,7 @@ msgstr "Заказ на возврат"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "Заказы на возврат"
 
@@ -2491,7 +2530,11 @@ msgstr "Владельцы"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr "Шаблон этикетки"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "Шаблоны этикетки"
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr "Шаблон отчета"
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr "Шаблоны отчётов"
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "Отгрузка"
 
@@ -2591,7 +2632,7 @@ msgstr "Неактивный"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "Нет склада"
 
@@ -2600,7 +2641,7 @@ msgstr "Нет склада"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Серийный номер"
@@ -2611,10 +2652,10 @@ msgstr "Серийный номер"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Количество"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr "Запасы назначены"
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr "Настройка упаковки"
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "Изменить статус"
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr "Добавить Заметку"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr "Код партии"
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr "Ввести код партии для полученных запасов"
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "Серийные номера"
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr "Следующий серийный номер"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "Введите начальное количество для этого товара на складе"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "Введите начальное количество для этого товара на складе"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "Введите серийные номера для нового склада (или оставьте пустым)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr "Добавить товар на склад"
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr "Выберите часть для установки"
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr "Подтвердить перемещение запаса"
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "Загрузка..."
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr "Переместить в местоположение по умолчанию"
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "Переместить"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "Переместить"
 msgid "In Stock"
 msgstr "В наличии"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Добавить"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Количество"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr "Добавить Остатки"
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr "Запас добавлен"
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr "Удалить запасы"
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr "Запас удален"
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "Перемещение запасов"
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr "Запас перемещен"
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr "Запас перемещен"
 msgid "Count Stock"
 msgstr "Подсчет остатков"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr "Запас посчитан"
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr "Изменить статус запасов"
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr "Состояние запаса изменено"
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr "Объединить Запасы"
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr "Запасы объединены"
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr "Передать запас клиенту"
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr "Запас передан клиенту"
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr "Удалить складскую позицию"
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr "Запас удален"
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr "Расположение основного склада"
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "Товар создан"
@@ -4289,11 +4351,19 @@ msgstr "Товар создан"
 msgid "Item Updated"
 msgstr "Товар обновлен"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "Товар удален"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "Вы уверены, что хотите удалить этот элемент?"
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "Проверка того, что вы уже вошли в систему"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "Ничего не выбрано"
 
@@ -4354,12 +4424,12 @@ msgstr "Ничего не выбрано"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "Войти"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "Нет аккаунта?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
 msgid "Single Sign On"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
+msgstr "Не включен"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr "Не включен"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr "Единая регистрация не включена для этого сервера"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "С вашей учетной записью связаны следующие адреса электронной почты:"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "Основной"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "Проверено"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "Непроверенный"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "Сделать основным"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr "Отправить подтверждение повторно"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "Добавить адрес электронной почты"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "Электронная почта"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "Адрес электронной почты"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "Добавить Email"
 
@@ -5037,76 +5107,76 @@ msgstr "Добавить Email"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr "Отменить"
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Настройки отображения"
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "Специальная единица"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "Специальная единица"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr "Инвентаризация"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr "Ошибки плагина"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr "Альбомный"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "Штрих-коды"
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr "Отчеты"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr "Параметры отображения"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "Удалить уведомление"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "История"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "Пометить как непрочитанное"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr "Удалить уведомления"
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr "Удалить уведомления"
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,17 +5701,43 @@ msgstr "Ответственный"
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr "Создано"
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
+#: src/pages/build/BuildDetail.tsx:196
+#: src/pages/part/PartDetail.tsx:280
+#~ msgid "Unlink custom barcode from part"
+#~ msgstr "Unlink custom barcode from part"
+
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr "Любое расположение"
+
+#: src/pages/build/BuildDetail.tsx:202
+#~ msgid "Build Order updated"
+#~ msgstr "Build Order updated"
+
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
+msgstr "Место назначения"
+
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
+msgstr "Создано"
+
+#: src/pages/build/BuildDetail.tsx:221
+#~ msgid "Edit build order"
+#~ msgstr "Edit build order"
+
+#: src/pages/build/BuildDetail.tsx:226
+#~ msgid "Duplicate build order"
+#~ msgstr "Duplicate build order"
+
+#: src/pages/build/BuildDetail.tsx:229
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:255
 #: src/pages/sales/ReturnOrderDetail.tsx:220
 #: src/pages/sales/SalesOrderDetail.tsx:231
@@ -5661,16 +5745,11 @@ msgstr "Создано"
 msgid "Start Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:196
-#: src/pages/part/PartDetail.tsx:280
-#~ msgid "Unlink custom barcode from part"
-#~ msgstr "Unlink custom barcode from part"
+#: src/pages/build/BuildDetail.tsx:231
+#~ msgid "Delete build order"
+#~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:202
-#~ msgid "Build Order updated"
-#~ msgstr "Build Order updated"
-
-#: src/pages/build/BuildDetail.tsx:203
+#: src/pages/build/BuildDetail.tsx:237
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:263
 #: src/pages/sales/ReturnOrderDetail.tsx:228
 #: src/pages/sales/SalesOrderDetail.tsx:239
@@ -5681,31 +5760,11 @@ msgstr ""
 msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
+#: src/pages/build/BuildDetail.tsx:245
 #: src/tables/sales/SalesOrderLineItemTable.tsx:303
 msgid "Completed"
 msgstr "Завершено"
 
-#: src/pages/build/BuildDetail.tsx:221
-#~ msgid "Edit build order"
-#~ msgstr "Edit build order"
-
-#: src/pages/build/BuildDetail.tsx:226
-#~ msgid "Duplicate build order"
-#~ msgstr "Duplicate build order"
-
-#: src/pages/build/BuildDetail.tsx:231
-#~ msgid "Delete build order"
-#~ msgstr "Delete build order"
-
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
-msgstr "Любое расположение"
-
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
-msgstr "Место назначения"
-
 #: src/pages/build/BuildDetail.tsx:276
 msgid "Build Details"
 msgstr "Подробности сборки"
@@ -5727,7 +5786,7 @@ msgstr "Незавершенная продукция"
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr "Редактировать заказ на производство"
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr "Создать заказ для производство"
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Веб-сайт"
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr "Подкатегории"
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr "Структура"
 
@@ -6182,7 +6255,7 @@ msgstr "Категория детали верхнего уровня"
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr "Добавить категорию детали"
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr "Ревизия"
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr "Ключевые слова"
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr "В производстве"
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr "Заблокировано"
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr "Ценовой диапазон"
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr "Запланировано"
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr "Дата в прошлом"
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr "Запланированное количество"
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr "Ожидаемое количество"
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr "Дата создания"
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr "Дата завершения"
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr "Выбранные запасы"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr "Номер отслеживания"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr "Номер счета"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr "Данные отгрузки"
 
@@ -7062,45 +7134,45 @@ msgstr "Данные отгрузки"
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr "Отменить отгрузку"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr "Отправить отгрузку"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr "Действия с отгрузкой"
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr "Выбрать столбцы"
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "Убрать фильтрацию"
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "Выбрать фильтр"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "Отфильтровать"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr "Включая подкатегории"
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr "Включить подкатегории в результаты"
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr "Имеет ед. измерения"
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr "Включить детали в подкатегориях"
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr "Фильтр по деталям, в которых есть ед. измерения"
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Виртуальный"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr "Получить выбранные элементы"
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr "Выделить серийные номера"
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr "Отменить"
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/sk/messages.po b/src/frontend/src/locales/sk/messages.po
index 2a88620d9d..bea9d5c38c 100644
--- a/src/frontend/src/locales/sk/messages.po
+++ b/src/frontend/src/locales/sk/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: sk\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Slovak\n"
 "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr ""
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr ""
@@ -196,28 +197,41 @@ msgstr ""
 msgid "Copy"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr ""
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
 msgstr ""
 
 #: src/components/buttons/PrintingActions.tsx:152
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr ""
 
@@ -307,6 +308,41 @@ msgstr ""
 msgid "No"
 msgstr ""
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr ""
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr ""
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr ""
 
@@ -715,7 +751,7 @@ msgstr ""
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr ""
 msgid "A server error occurred"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr ""
 
@@ -904,19 +940,20 @@ msgstr ""
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr ""
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr ""
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr ""
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr ""
@@ -1097,6 +1134,7 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr ""
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr ""
@@ -1231,7 +1269,7 @@ msgstr ""
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr ""
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr ""
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr ""
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr ""
 
@@ -1783,8 +1821,8 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr ""
 
@@ -1823,7 +1861,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr ""
 
@@ -1854,9 +1892,9 @@ msgstr ""
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr ""
 
@@ -1883,8 +1921,8 @@ msgstr ""
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr ""
 
@@ -1900,12 +1938,12 @@ msgstr ""
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr ""
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr ""
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr ""
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr ""
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr ""
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr ""
 
@@ -2390,7 +2429,7 @@ msgstr ""
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2406,11 +2445,11 @@ msgstr ""
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr ""
@@ -2419,12 +2458,12 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr ""
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr ""
 
@@ -2591,7 +2632,7 @@ msgstr ""
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr ""
 
@@ -2600,7 +2641,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr ""
@@ -2611,10 +2652,10 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr ""
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr ""
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr ""
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr ""
 msgid "In Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr ""
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr ""
 
@@ -4354,12 +4424,12 @@ msgstr ""
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr ""
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr ""
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr ""
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr ""
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/sl/messages.po b/src/frontend/src/locales/sl/messages.po
index a1470852ce..bc35d7738b 100644
--- a/src/frontend/src/locales/sl/messages.po
+++ b/src/frontend/src/locales/sl/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: sl\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Slovenian\n"
 "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr ""
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr ""
@@ -196,29 +197,42 @@ msgstr "Kopirano"
 msgid "Copy"
 msgstr "Kopiraj"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Printaj nalepko"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "Printaj"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Tiskaj poročilo"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Printaj nalepko"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "Printaj"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Tiskaj poročilo"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Dejanja tiskanja"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Tiskanje nalepk"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Tiskanje poročil"
 
@@ -307,6 +308,41 @@ msgstr ""
 msgid "No"
 msgstr ""
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr ""
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr ""
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr ""
 
@@ -715,7 +751,7 @@ msgstr ""
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr ""
 msgid "A server error occurred"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr ""
 
@@ -904,19 +940,20 @@ msgstr ""
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr ""
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr ""
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr ""
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr ""
@@ -1097,6 +1134,7 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr ""
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr ""
@@ -1231,7 +1269,7 @@ msgstr ""
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr ""
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr ""
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr ""
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr ""
 
@@ -1783,8 +1821,8 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr ""
 
@@ -1823,7 +1861,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr ""
 
@@ -1854,9 +1892,9 @@ msgstr ""
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr ""
 
@@ -1883,8 +1921,8 @@ msgstr ""
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr ""
 
@@ -1900,12 +1938,12 @@ msgstr ""
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr ""
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr ""
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr ""
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr ""
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr ""
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr ""
 
@@ -2390,7 +2429,7 @@ msgstr ""
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2406,11 +2445,11 @@ msgstr ""
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr ""
@@ -2419,12 +2458,12 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr ""
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr ""
 
@@ -2591,7 +2632,7 @@ msgstr ""
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr ""
 
@@ -2600,7 +2641,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr ""
@@ -2611,10 +2652,10 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr ""
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr ""
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr ""
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr ""
 msgid "In Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr ""
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr ""
 
@@ -4354,12 +4424,12 @@ msgstr ""
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr ""
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr ""
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr ""
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr ""
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/sr/messages.po b/src/frontend/src/locales/sr/messages.po
index 6848969cf1..a67f1fb500 100644
--- a/src/frontend/src/locales/sr/messages.po
+++ b/src/frontend/src/locales/sr/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: sr\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Serbian (Latin)\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
@@ -94,12 +94,13 @@ msgstr "Skeniraj ili unesi podatke bar koda"
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr "Greška pri povezivanju bar koda"
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Linkuj"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr "Ovo će ukloniti link sa povezanim barkodom"
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Prekini vezu Barkoda"
@@ -196,29 +197,42 @@ msgstr "Iskopirano"
 msgid "Copy"
 msgstr "Kopiraj"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Štampaj naziv"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "Štampaj"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Greška u štampanju"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Štampaj naziv"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "Štampaj"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Greška u štampanju"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Opcije štampanja"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Štampaj nazive"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Štampaj izveštaje"
 
@@ -307,6 +308,41 @@ msgstr "Da"
 msgid "No"
 msgstr "Ne"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr "Kasni"
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr "Nijedan vidžet nije selektovan"
@@ -378,7 +414,7 @@ msgstr "Prikaži broj kategorija koji ste pretplatili"
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Niske zalihe"
 
@@ -545,7 +581,7 @@ msgstr "Promeni jezik korisničkog interfejsa"
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Označi kao pročitano"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "Ukloniti sliku sa ovog predmeta?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Ukloni"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Obriši"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Podnesi"
 
@@ -715,7 +751,7 @@ msgstr "Učitavanje slike nije uspelo"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "Greška na serveru"
 msgid "A server error occurred"
 msgstr "Desila se greška na serverskoj strani"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Greška Obrasca"
 
@@ -904,19 +940,20 @@ msgstr "Greška Obrasca"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "Postoje greške na jednom ili više polja na obrascu"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Obnovi"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Vaše korisničko ime"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Lozinka"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "Ponovite lozinku"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "Registruj"
@@ -1097,6 +1134,7 @@ msgstr "Host"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "API Verzija"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Ekstenzije"
@@ -1231,7 +1269,7 @@ msgstr "Pretraga"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Učitavanje"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "Učitavanje zapisa"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr "Učitani redovi"
 
@@ -1433,65 +1471,65 @@ msgstr "Učitani redovi"
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr "Opcije"
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Akcije Barkoda"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Akcije Barkoda"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr "Pregledaj barkod"
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Pogledaj barkod"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Link Barkoda"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr "Linkuj poseban barkod sa ovim predmetom"
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Prekini link prilagođenog barkoda"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Izmeni"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "Imeni stavku"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Obriši stavku"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "Zadrži"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Dupliciraj"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Dupliciraj stavku"
 
@@ -1783,8 +1821,8 @@ msgstr "Sistemska podešavanja"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Administratorski centar"
 
@@ -1823,7 +1861,7 @@ msgstr "Delovi"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "Zalihe"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr "Proizvodnja"
 
@@ -1846,7 +1884,7 @@ msgstr "Proizvodnja"
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "Kupovina"
 
@@ -1854,9 +1892,9 @@ msgstr "Kupovina"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Prodaja"
 
@@ -1883,8 +1921,8 @@ msgstr "Grupe"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Obaveštenja"
 
@@ -1900,12 +1938,12 @@ msgstr "Navigacija"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "O nama"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "Sve označi kao pročitano"
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr "Dobavljači"
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr "Proizvođači"
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "Mušterije"
 
@@ -2058,8 +2096,8 @@ msgstr "Informacije o ekstenziji"
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr "Datum"
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "Nepoznat model: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Deo"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "Deo nabavljača"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "Delovi nabavljača"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr "Deo proizvođača"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "Delovi proizvođača"
 
@@ -2289,9 +2328,9 @@ msgstr "Stavka zalihe"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "Stavke zaliha"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "Lokacija zaliha"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "Kompanije"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "Kod projketa"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "Kodovi projekta"
 
@@ -2390,7 +2429,7 @@ msgstr "Narudžbenica"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "Narudžbenice"
 
@@ -2406,11 +2445,11 @@ msgstr "Linije narudžbenica"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "Nalog za prodaju"
@@ -2419,12 +2458,12 @@ msgstr "Nalog za prodaju"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "Naloti za prodaju"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "Pošiljka"
 
@@ -2442,7 +2481,7 @@ msgstr "Nalog za povrat"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "Nalozi za povrat"
 
@@ -2491,7 +2530,11 @@ msgstr "Vlasnici"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr "Šablon za naziv"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "Šabloni za nazive"
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr "Šablon za izveštaj"
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr "Šabloni za izveštaje"
 
@@ -2576,7 +2617,7 @@ msgstr "Greške"
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "Pošiljka"
 
@@ -2591,7 +2632,7 @@ msgstr "Neaktivno"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "Nema zalihe"
 
@@ -2600,7 +2641,7 @@ msgstr "Nema zalihe"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Serijski broj"
@@ -2611,10 +2652,10 @@ msgstr "Serijski broj"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Količina"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr "Serija"
@@ -3132,7 +3173,7 @@ msgstr "Molimo ispravite greške u izabranim delovima"
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr "Naruči delove"
@@ -3610,7 +3651,7 @@ msgstr "Izlazna kompilacija"
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr "Izlazna kompilacija"
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr "Alocirano"
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr "Lokacija izvora"
 
@@ -3704,8 +3745,8 @@ msgstr "Stavke zaliha alocirane"
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr "Pretplaćeni"
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr "Doradi pakovanje"
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "Promeni status"
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr "Dodaj belešku"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr "Prodavnica sa već primeljenom zalihom"
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr "Kod serije"
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr "Unesi kod serije za primljene stavke"
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "Serijski brojevi"
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr "Sledeći serijski broj"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "Dodaj primljenu količinu kao pakovanje umesto kao individualnu stavku"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "Unesi početnu količinu za ovu stavku zalihe"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "Unesi početnu količinu za ovu stavku zalihe"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "Unesi serijske brojeve za novu zalihu (ili ostavi nepopunjeno)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr "Status zalihe"
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr "Dodaj stavku zalihe"
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr "Izaberi deo za instalaciju"
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr "Potvrdi transfer zalihe"
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "Učitavanje"
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr "Premesti na podrazumevanu lokaciju"
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "Premesti"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "Premesti"
 msgid "In Stock"
 msgstr "U zalihama"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Dodaj"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Računaj"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr "Dodaj zalihu"
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr "Zaliha dodata"
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr "Ukloni zalihu"
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr "Zaliha uklonjena"
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "Prebaci zalihu"
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr "Zaliha prebačena"
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr "Zaliha prebačena"
 msgid "Count Stock"
 msgstr "Prebroj zalihe"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr "Zaliha prebrojena"
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr "Promeni status zalihe"
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr "Status zalihe izmenjen"
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr "Spoji zalihe"
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr "Zalihe spojene"
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr "Dodeli zalihu mušteriji"
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr "Zaliha dodeljena mušteriji"
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr "Izbriši stavku zalihe"
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr "Zaliha izbrisana"
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr "Lokacija roditeljske zalihe"
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr "Lista unosa koje možete izabrati"
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr "Isteklo je vreme"
 msgid "The request timed out"
 msgstr "Isteklo je vreme zahteva"
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "Stavka kreirana"
@@ -4289,11 +4351,19 @@ msgstr "Stavka kreirana"
 msgid "Item Updated"
 msgstr "Stavka ažurirana"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "Stavka izbrisana"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "Da li ste sigurni da želite da izbrišete ovu stavku"
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "Proverava se da li ste već prijavljeni"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "Nema selekcije"
 
@@ -4354,12 +4424,12 @@ msgstr "Nema selekcije"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "Prijavljivanje"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "Da li imate otvoren korisnički nalog?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
 msgid "Single Sign On"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
+msgstr "Nije omogućeno"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr "Nije omogućeno"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr "Pojedinačno prijavljivanje nije omogućeno na ovom serveru"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "Sledeća adresa elektronske pošte povezana sa vašim nalogom"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "Primarni"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "Verifikovan"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "Nije verifikovan"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "Učini ga primarnim"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr "Ponovo pošalji verifikaciju"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "dodaj adresu elektronske pošte"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "E pošta"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "Adresa elektronske pošte"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "Dodaj adresu elektronske pošte"
 
@@ -5037,76 +5107,76 @@ msgstr "Dodaj adresu elektronske pošte"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr "Opozovi"
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Podešavanje ekrana"
@@ -5251,65 +5301,69 @@ msgstr "Poslednje uzeto"
 msgid "Base currency"
 msgstr "Osnovna valuta"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr "Importovanje podatka"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr "Skeniranja barkodova"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
-msgstr "Pozadinski zadaci "
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
+msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr "Skeniranja barkodova"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr "Pozadinski zadaci "
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr "Izveštaji o greškama"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "Valute"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr "Posebne države"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "Posebne jedinice"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "Parametri dela"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "Posebne jedinice"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "Parametri dela"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr "Kategorije parametara"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr "Inventarizacija"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr "Tipovi lokacija"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,17 +5373,17 @@ msgstr "Mašine"
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr "Napredne opcije"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
+msgstr "Napredne opcije"
+
 #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
-msgstr ""
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
 
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
@@ -5392,21 +5446,21 @@ msgstr "Spoljašnje ekstenzije nisu omogućene za ovu instalaciju"
 msgid "Plugin Errors"
 msgstr "Greške ekstenzija"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr "Veličina stranice"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr "Pejzaž"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr "Dodaj modelu"
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr "Sve merne jedinice"
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "Barkodovi"
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr "Izveštavanje"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr "Prikaži opcije"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "Obriši notifikacije"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "Istorija"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "Označi kao nepročitano"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr "Obriši notifikacije"
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr "Obriši notifikacije"
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,17 +5701,43 @@ msgstr "Odgovoran"
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr "Kreirano"
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
+#: src/pages/build/BuildDetail.tsx:196
+#: src/pages/part/PartDetail.tsx:280
+#~ msgid "Unlink custom barcode from part"
+#~ msgstr "Unlink custom barcode from part"
+
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr "Bilo koja lokacija"
+
+#: src/pages/build/BuildDetail.tsx:202
+#~ msgid "Build Order updated"
+#~ msgstr "Build Order updated"
+
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
+msgstr "Destinaciona lokacija"
+
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
+msgstr "Kreirano"
+
+#: src/pages/build/BuildDetail.tsx:221
+#~ msgid "Edit build order"
+#~ msgstr "Edit build order"
+
+#: src/pages/build/BuildDetail.tsx:226
+#~ msgid "Duplicate build order"
+#~ msgstr "Duplicate build order"
+
+#: src/pages/build/BuildDetail.tsx:229
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:255
 #: src/pages/sales/ReturnOrderDetail.tsx:220
 #: src/pages/sales/SalesOrderDetail.tsx:231
@@ -5661,16 +5745,11 @@ msgstr "Kreirano"
 msgid "Start Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:196
-#: src/pages/part/PartDetail.tsx:280
-#~ msgid "Unlink custom barcode from part"
-#~ msgstr "Unlink custom barcode from part"
+#: src/pages/build/BuildDetail.tsx:231
+#~ msgid "Delete build order"
+#~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:202
-#~ msgid "Build Order updated"
-#~ msgstr "Build Order updated"
-
-#: src/pages/build/BuildDetail.tsx:203
+#: src/pages/build/BuildDetail.tsx:237
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:263
 #: src/pages/sales/ReturnOrderDetail.tsx:228
 #: src/pages/sales/SalesOrderDetail.tsx:239
@@ -5681,31 +5760,11 @@ msgstr ""
 msgid "Target Date"
 msgstr "Ciljani datum"
 
-#: src/pages/build/BuildDetail.tsx:211
+#: src/pages/build/BuildDetail.tsx:245
 #: src/tables/sales/SalesOrderLineItemTable.tsx:303
 msgid "Completed"
 msgstr "Završeno"
 
-#: src/pages/build/BuildDetail.tsx:221
-#~ msgid "Edit build order"
-#~ msgstr "Edit build order"
-
-#: src/pages/build/BuildDetail.tsx:226
-#~ msgid "Duplicate build order"
-#~ msgstr "Duplicate build order"
-
-#: src/pages/build/BuildDetail.tsx:231
-#~ msgid "Delete build order"
-#~ msgstr "Delete build order"
-
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
-msgstr "Bilo koja lokacija"
-
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
-msgstr "Destinaciona lokacija"
-
 #: src/pages/build/BuildDetail.tsx:276
 msgid "Build Details"
 msgstr "Detalji naloga"
@@ -5727,7 +5786,7 @@ msgstr "Nepotpuni nalozi"
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr "Alocirano zaliha"
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr "Izmeni nalog za izradu"
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr "Dodaj nalog za izradu"
 
@@ -5902,6 +5961,20 @@ msgstr "Nalog za izradu"
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Web sajt"
@@ -5946,7 +6019,7 @@ msgstr "Proizvođač"
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr "Količina pakovanja"
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr "Na nalogu"
 
@@ -6163,8 +6236,8 @@ msgstr "Podkategorije"
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr "Strukturalno"
 
@@ -6182,7 +6255,7 @@ msgstr "Vrhovna kategorija dela"
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr "Izmeni kategoriju dela"
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr "Akcije za podkategorije ove kategorije"
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr "Akcije kategorije"
 
@@ -6226,13 +6300,13 @@ msgstr "Detalji kategorije"
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr "Dodela naloga za izradu"
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr "Dodela prodajnih naloga"
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr "Revizija"
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr "Ključne reči"
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr "Dostupne zalihe"
@@ -6337,7 +6411,7 @@ msgstr "U produkciji"
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr "Zaključano"
 
@@ -6381,14 +6455,12 @@ msgstr "Virtualni deo"
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr "Datum kreiranja"
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr "Kreirano od strane"
 
@@ -6399,7 +6471,7 @@ msgstr "Podrazumevani dobavljač"
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr "Raspon cena"
 
@@ -6448,7 +6520,7 @@ msgstr "Povezani delovi"
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr "Izmeni deo"
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr "Dodaj deo"
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr "Prensi zalihe dela"
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr "Nalog"
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr "Naruči zalihe"
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr "Akcije dela"
 
@@ -6555,36 +6627,36 @@ msgstr "Cena prodaje"
 msgid "Sale History"
 msgstr "Istorija prodaje"
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr "Maksimum"
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr "Raspoređeno"
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr "Minimum"
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr "Količina je spekulativna"
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr "Nema dostupnog datuma za dostavljenu količinu"
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr "Datum je u prošlosti"
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr "Raspoređena količina"
 
@@ -6600,42 +6672,42 @@ msgstr "Nema informacija o raspoređivanju za izabrani deo"
 msgid "Expected Quantity"
 msgstr "Očekivana količina"
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr "Izmeni unos popisa zaliha"
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr "Obriši unos popisa zaliha"
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr "Generiši izveštaj o popisu zailha"
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr "Izveštaj o popisu zaliha zakazan"
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr "Vrednost zaliha"
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr "Izveštaj o novom popisu zaliha"
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr "Minimalna vrednost"
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr "Maksimalna vrednost"
@@ -6657,7 +6729,7 @@ msgstr "Ukupna cena"
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "Komponenta"
 
@@ -6894,7 +6966,7 @@ msgstr "Datum izdavanja"
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr "Datum završetka"
@@ -6935,7 +7007,7 @@ msgstr "Akcije narudžbine"
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr "Referenca mušterije"
@@ -7025,36 +7097,36 @@ msgstr "Završi prodajnu narudžbinu"
 msgid "Ship Order"
 msgstr "Naruči pošiljku"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr "Referenca pošiljke"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr "Alocirane stavke"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr "Broj za praćenje"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr "Broj narudžbenice"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr "Datum isporuke"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr "Datum dostave"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr "Detalji isporukue"
 
@@ -7062,45 +7134,45 @@ msgstr "Detalji isporukue"
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr "Izmeni isporuku"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr "Otkaži isporuku"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr "Završi isporuku"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr "Na čekanju"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr "Poslato"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr "Isporučeno"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr "Pošalji isporuku"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr "Akcije isporuke"
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr "Podlokacije"
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr "Spoljno"
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr "Tip lokacije"
 
@@ -7136,7 +7208,7 @@ msgstr "Podrazumevani delovi"
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr "Izmeni lokaciju zaliha"
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr "Akcija za lokacije podređene ovoj"
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr "Akcije lokacija"
 
@@ -7376,28 +7449,28 @@ msgstr "Izaberi kolone"
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr "Excel (.xlsx)"
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr "Preuzmi podatke"
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr "Prikaži naloge dodeljene meni"
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr "Neizvršeno"
 
@@ -7420,10 +7493,6 @@ msgstr "Neizvršeno"
 msgid "Show outstanding items"
 msgstr "Prikaži neizvršene stavke"
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr "Kasni"
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr "Prikaži stavke koje kasne"
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr "Filtriraj po odgovornom vlasniku"
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr "Filtriraj po korisniku"
@@ -7542,6 +7612,10 @@ msgstr "Filtriraj po korisniku koji je kreirao nalog"
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "Ukloni filter"
@@ -7560,16 +7634,16 @@ msgstr "Unesi vrednost filtera"
 msgid "Select date value"
 msgstr "Izaberi vrednost datuma"
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "Izaberi filter"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "Filter"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr "Filteri tabele"
 
@@ -7633,29 +7707,37 @@ msgstr "Server je vratio neispravan tip podataka"
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr "Obriši izabrane stavke"
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr "Da li ste sigurni da želite da obrišete ove izabrane stavke?"
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr "Ova akcija se ne može poništiti"
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr "Prilagođeni filteri tabele su aktivni"
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr "Obriši izabrane zapise"
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr "Osveži podatke"
 
@@ -7677,7 +7759,7 @@ msgstr "Informacije o delu"
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr "Spoljne zalihe"
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr "Uključuje zalihe varijanti"
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr "Izgradnja"
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr "Prikaži potrošne stavke"
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr "Ima cenu"
 
@@ -7894,7 +7976,7 @@ msgstr "Spisak materijala ne može da se menja, deo je zaključan"
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr "Sklop"
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr "Prikaži aktivne sklopove"
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr "Može da se prati"
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr "Prikaži stavke alocirane nalogu za izradu"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr "Uključi varijante"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr "Uključi narudžbine za varijante delova"
@@ -7945,17 +8027,17 @@ msgstr "Uključi narudžbine za varijante delova"
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr "Status narudžbenice"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr "Alocirana količina"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr "Dostupna količina"
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr "Prikaži opcione stavke"
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr "Moguće testirate"
 
@@ -8113,38 +8195,34 @@ msgstr "Pogledaj deo"
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr "Potrebne zalihe"
 msgid "View Build Order"
 msgstr "Prikaži nalog za izradu"
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr "Pretplaćen si na obaveštenja za ovu kategoriju"
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr "Uključi podkategorije"
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr "Uključi podkategorije u rezultatima"
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr "Prikaži strukturne kategorije"
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr "Prikaži kategorije na koje je korisnik pretplaćen"
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr "Nova kategorija dela"
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr "Dodaj kategoriju dela"
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr "Prikaži šablone sa izborima"
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr "Ima merne jedinice"
 
@@ -8795,145 +8886,154 @@ msgstr "Prikaži primljene stavke"
 msgid "View Sales Order"
 msgstr "Prikaži narudžbenicu"
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr "Minimalne zalihe"
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr "Filtriraj po statusu aktivnog dela"
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr "Filtriraj po statusu zaključavanja dela"
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr "Filtriraj po atributu sklopa"
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr "Uključi delove u podkategorije"
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr "Filtriraj po atributu komponente"
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr "Filtriraj po atributu koji može da se testira"
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr "Filtriraj po atributu za praćenje"
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr "Filtriraj delove koji imaju merne jedinice"
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr "Ima interni broj dela"
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr "Filtriraj delove koji imaju interni broj dela"
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr "Ima zalihe"
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr "Filtriraj delove koji imaju zalihe"
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr "Filtriraj delove koji imaju niske zalihe"
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr "Može da se kupi"
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr "Filtriraj delove koji mogu da se kupe"
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr "Može da se proda"
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr "Filtriraj delove koji mogu da se prodaju"
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Virtualan"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr "Filtriraj delove koji su virtualni"
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr "Nije virtualni"
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr "Je šablon"
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr "Filtriraj delove koji su šabloni"
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr "Je revizija"
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr "Filtriraj delove koji su revizije"
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr "Ima revizije"
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr "Filtriraj delove koji imaju revizije"
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr "Filtriraj delove koji imaju informaciju o ceni"
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr "Filtriraj delove koji imaju dostupne zalihe"
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr "Filtriraj delove na koje je korisnik pretplaćen"
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr "Ima inventar"
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr "Filtriraj delove koji imaju informacije o inventaru"
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr "Naruči izabrane delove"
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr "Prikaži aktivne varijante"
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr "Šablon"
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr "Dodatak nije instaliran"
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr "Dodatak"
 
@@ -9438,37 +9537,45 @@ msgstr "Primi izabrane stavke"
 msgid "Receive Item"
 msgstr "Primi stavku"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr "Prikaži nepodmirene alokacije"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr "Dodeljeno isporuci"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr "Prikaži raspodele dodeljene isporuci"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr "Nema isporuke"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr "Nije isporučeno"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr "Izmeni alokaciju"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr "Obriši alokaciju"
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr "Alociraj serijske brojeve"
@@ -9506,38 +9613,85 @@ msgstr "Naruči zalihe"
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr "Kreiraj isporuku"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr "Stavke"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr "Pogledaj isporuku"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr "Izmeni isporuku"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr "Otkaži isporuku"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr "Dodaj isporuku"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr "Pokaži isporuke koje su isporučene"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr "Pokaži isporuke koje su dostavljene"
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr "Opozovi"
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr "Informacije o barkodu"
@@ -9659,6 +9813,14 @@ msgstr "Izveštaj o greški obrisan"
 msgid "Error Details"
 msgstr "Detalji greške"
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr "Obriši sesiju uvoza"
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr "Kreiraj sesiju uvoza"
 
@@ -9733,18 +9895,17 @@ msgstr "Kreiraj sesiju uvoza"
 msgid "Uploaded"
 msgstr "Uploadovano"
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr "Tip modela"
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr "Filtriraj po tipu ciljnog modela"
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr "Filtriraj po statusu sesije uvoza"
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr "Filtriraj po omogućenom statusu"
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr "Prikaži stavke koje su dostupne"
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr "Uključi podlokacije"
 
@@ -10315,39 +10476,47 @@ msgstr "Pokaži samo uspešne testove"
 msgid "Show results for enabled tests"
 msgstr "Prikaži rezultate za omogućene testove"
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr "Uključi podlokacije u rezultatima"
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
-msgstr "Pokaži strukturalne lokacije"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
+msgstr "Uključi podlokacije u rezultatima"
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr "Pokaži strukturalne lokacije"
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr "Pokaži eksterne lokacije"
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr "Ima tip lokacije"
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr "Filtriraj po tipu lokacije"
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr "Dodaj lokaciju zaliha"
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr "Dodato"
diff --git a/src/frontend/src/locales/sv/messages.po b/src/frontend/src/locales/sv/messages.po
index 77230c4498..156e060d3a 100644
--- a/src/frontend/src/locales/sv/messages.po
+++ b/src/frontend/src/locales/sv/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: sv\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Swedish\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Länk"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Ta bort länk för streckkod"
@@ -196,29 +197,42 @@ msgstr "Kopierad"
 msgid "Copy"
 msgstr "Kopiera"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Skriv ut etikett"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "Skriv ut"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Skriv ut Rapport"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Skriv ut etikett"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "Skriv ut"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Skriv ut Rapport"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Utskriftsalternativ"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Skriv ut etiketter"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Skriv ut rapporter"
 
@@ -307,6 +308,41 @@ msgstr "Ja"
 msgid "No"
 msgstr "Nej"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Få i lager"
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Markera som läst"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "Vill du ta bort den associerade bilden från denna artikel?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Ta bort"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Rensa"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Skicka"
 
@@ -715,7 +751,7 @@ msgstr "Bilduppladdning misslyckades"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "Serverfel"
 msgid "A server error occurred"
 msgstr "Ett serverfel inträffade"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Formulär fel"
 
@@ -904,19 +940,20 @@ msgstr "Formulär fel"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "Fel finns för ett eller flera formulärfält"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Uppdatera"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Ditt användarnamn"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Lösenord"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "Upprepa lösenord"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "Registrera"
@@ -1097,6 +1134,7 @@ msgstr "Värd"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "API Version"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Plugins"
@@ -1231,7 +1269,7 @@ msgstr "Sök"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Laddar"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "Importerar poster"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr "Alternativ"
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Streckkods åtgärder"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Streckkods åtgärder"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Visa streckkod"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Länka streckkod"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Ta bort länk för anpassad streckkod"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Redigera"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "Redigera objekt"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Radera objekt"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "Vänta"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Duplicera"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Duplicera objekt"
 
@@ -1783,8 +1821,8 @@ msgstr "Systeminställningar"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Admin-center"
 
@@ -1823,7 +1861,7 @@ msgstr "Artiklar"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "Lagersaldo"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "Inköp"
 
@@ -1854,9 +1892,9 @@ msgstr "Inköp"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Försäljning"
 
@@ -1883,8 +1921,8 @@ msgstr "Grupper"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Notifikationer"
 
@@ -1900,12 +1938,12 @@ msgstr "Navigering"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "Om"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "Markera alla som lästa"
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr "Tillverkare"
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "Kunder"
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "Okänd modell: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Artkel"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "Leverantörsartikel"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "Leverantörsartikel"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr "Tillverkarens artiklar"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "Tillverkarens artiklar"
 
@@ -2289,9 +2328,9 @@ msgstr "Lager artikel"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "Artikel i lager"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "Lagerplats"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "Företag"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "Projektkod"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "Projektkoder"
 
@@ -2390,7 +2429,7 @@ msgstr "Inköpsorder"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "Inköpsorder"
 
@@ -2406,11 +2445,11 @@ msgstr "Inköpsorderrader"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "Försäljningsorder"
@@ -2419,12 +2458,12 @@ msgstr "Försäljningsorder"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "Försäljningsorder"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "Försäljningsorder leverans"
 
@@ -2442,7 +2481,7 @@ msgstr "Returorder"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "Returorder"
 
@@ -2491,7 +2530,11 @@ msgstr "Ägare"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr "Etikettmall"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "Etikettmallar"
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr "Rapportmall"
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr "Rapportmallar"
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "Frakt"
 
@@ -2591,7 +2632,7 @@ msgstr "Inaktiv"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "Inget på lager"
 
@@ -2600,7 +2641,7 @@ msgstr "Inget på lager"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Serienummer"
@@ -2611,10 +2652,10 @@ msgstr "Serienummer"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Antal"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "Ändra status"
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr "Lägg till anteckning"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "Serienummer"
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr "Nästa serienummer"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr ""
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr ""
 msgid "In Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr ""
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr "Sammanfoga lager"
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr "Ta bort lagerartikel"
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr "Överordnad lagerplats"
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "Artikel skapad"
@@ -4289,11 +4351,19 @@ msgstr "Artikel skapad"
 msgid "Item Updated"
 msgstr "Artikel uppdaterad"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "Artikel Borttagen"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "Är du säker på att du vill ta bort den här posten?"
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "Kontrollerar om du redan är inloggad"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "Inget val"
 
@@ -4354,12 +4424,12 @@ msgstr "Inget val"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "Logga in"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "Har du inget konto?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "Lägg till e-postadress"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "E-postadress"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Visningsinställningar"
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr "Basvaluta"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "Valutor"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr "Inventering"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr "Sidstorlek"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "Streckkoder"
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr "Rapportering"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr "Visningsalternativ"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "Radera meddelande"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "Historik"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "Markera som oläst"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,17 +5701,43 @@ msgstr "Ansvarig"
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr "Skapad"
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
+#: src/pages/build/BuildDetail.tsx:196
+#: src/pages/part/PartDetail.tsx:280
+#~ msgid "Unlink custom barcode from part"
+#~ msgstr "Unlink custom barcode from part"
+
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr "Alla platser"
+
+#: src/pages/build/BuildDetail.tsx:202
+#~ msgid "Build Order updated"
+#~ msgstr "Build Order updated"
+
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
+msgstr "Destinationsplats"
+
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
+msgstr "Skapad"
+
+#: src/pages/build/BuildDetail.tsx:221
+#~ msgid "Edit build order"
+#~ msgstr "Edit build order"
+
+#: src/pages/build/BuildDetail.tsx:226
+#~ msgid "Duplicate build order"
+#~ msgstr "Duplicate build order"
+
+#: src/pages/build/BuildDetail.tsx:229
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:255
 #: src/pages/sales/ReturnOrderDetail.tsx:220
 #: src/pages/sales/SalesOrderDetail.tsx:231
@@ -5661,16 +5745,11 @@ msgstr "Skapad"
 msgid "Start Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:196
-#: src/pages/part/PartDetail.tsx:280
-#~ msgid "Unlink custom barcode from part"
-#~ msgstr "Unlink custom barcode from part"
+#: src/pages/build/BuildDetail.tsx:231
+#~ msgid "Delete build order"
+#~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:202
-#~ msgid "Build Order updated"
-#~ msgstr "Build Order updated"
-
-#: src/pages/build/BuildDetail.tsx:203
+#: src/pages/build/BuildDetail.tsx:237
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:263
 #: src/pages/sales/ReturnOrderDetail.tsx:228
 #: src/pages/sales/SalesOrderDetail.tsx:239
@@ -5681,31 +5760,11 @@ msgstr ""
 msgid "Target Date"
 msgstr "Färdigdatum"
 
-#: src/pages/build/BuildDetail.tsx:211
+#: src/pages/build/BuildDetail.tsx:245
 #: src/tables/sales/SalesOrderLineItemTable.tsx:303
 msgid "Completed"
 msgstr "Slutförd"
 
-#: src/pages/build/BuildDetail.tsx:221
-#~ msgid "Edit build order"
-#~ msgstr "Edit build order"
-
-#: src/pages/build/BuildDetail.tsx:226
-#~ msgid "Duplicate build order"
-#~ msgstr "Duplicate build order"
-
-#: src/pages/build/BuildDetail.tsx:231
-#~ msgid "Delete build order"
-#~ msgstr "Delete build order"
-
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
-msgstr "Alla platser"
-
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
-msgstr "Destinationsplats"
-
 #: src/pages/build/BuildDetail.tsx:276
 msgid "Build Details"
 msgstr "Tillverknings Detaljer"
@@ -5727,7 +5786,7 @@ msgstr "Ofullständig produktion"
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr "Allokerat lager"
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr "Redigera Tillverknings order"
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr "Lägg till Tillverknings order"
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Webbplats"
@@ -5946,7 +6019,7 @@ msgstr "Tillverkare"
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr "På order"
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr "Tillverknings orderallokeringar"
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr "Försäljningsorder allokeringar"
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr "Tillgängligt lager"
@@ -6337,7 +6411,7 @@ msgstr "Under produktion"
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr "Låst"
 
@@ -6381,14 +6455,12 @@ msgstr "Virtuell artikel"
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr "Skapad Datum"
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr "Skapad av"
 
@@ -6399,7 +6471,7 @@ msgstr "Standardleverantör"
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr "Prisintervall"
 
@@ -6448,7 +6520,7 @@ msgstr "Relaterade artiklar"
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr "Redigera artikel"
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr "Lägg till artikel"
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr "Överför artikellager"
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr "Artikel åtgärder"
 
@@ -6555,36 +6627,36 @@ msgstr "Försäljning Prissättning"
 msgid "Sale History"
 msgstr "Försäljningshistorik"
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr "Totalpris"
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "Komponent"
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr "Slutför försäljningsorder"
 msgid "Ship Order"
 msgstr "Leveransorder"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr "Fakturanummer"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr "Leveransdatum"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr "Leveransdatum"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr "Underplaceringar"
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr "Extern"
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr "Typ av plats"
 
@@ -7136,7 +7208,7 @@ msgstr "Standard artiklar"
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr "Redigera lagerplats"
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr "Platsåtgärder"
 
@@ -7376,28 +7449,28 @@ msgstr "Välj kolumner"
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr "Filtrera efter användare"
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "Ta bort filter"
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "Välj filter"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "Filter"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr "Uppdatera data"
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr "Under tillverkning"
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr "Montering"
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr "Spårbart objekt"
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr "Inkludera underkategorier"
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr "Har enheter"
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr "Filtrera på aktiv artiklestatus"
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr "Filtrera efter monteringsattribut"
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr "Inkludera artiklar från underkategorier"
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr "Filtrera efter komponentattribut"
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr "Filtrera på spårbart attribut"
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr "Filtrera efter artiklar som har enheter"
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr "Har IAN"
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr "Filtrera efter artiklar som har ett internt artikelnummer"
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr "I lager"
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr "Filtrera efter artiklar som har enheter"
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr "Filtrera på ariklar som har lågt saldo"
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr "Kan köpas"
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr "Filtrera på artiklar som kan köpas"
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr "Försäljningsbar"
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr "Filtrera på artiklar som kan säljas"
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Virtuell"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr "Filtrera efter artiklar som är virtuella"
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr "Inte virtuell"
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr "Är mall"
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/th/messages.po b/src/frontend/src/locales/th/messages.po
index 7358cb8a73..29f4da0eb5 100644
--- a/src/frontend/src/locales/th/messages.po
+++ b/src/frontend/src/locales/th/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: th\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Thai\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr ""
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr ""
@@ -196,28 +197,41 @@ msgstr ""
 msgid "Copy"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr ""
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
 msgstr ""
 
 #: src/components/buttons/PrintingActions.tsx:152
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr ""
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr ""
 
@@ -307,6 +308,41 @@ msgstr ""
 msgid "No"
 msgstr ""
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr ""
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr ""
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr ""
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr ""
 
@@ -715,7 +751,7 @@ msgstr ""
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr ""
 msgid "A server error occurred"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr ""
 
@@ -904,19 +940,20 @@ msgstr ""
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr ""
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr ""
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr ""
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr ""
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr ""
@@ -1097,6 +1134,7 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr ""
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr ""
@@ -1231,7 +1269,7 @@ msgstr ""
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr ""
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr ""
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr ""
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr ""
 
@@ -1783,8 +1821,8 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr ""
 
@@ -1823,7 +1861,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr ""
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr ""
 
@@ -1854,9 +1892,9 @@ msgstr ""
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr ""
 
@@ -1883,8 +1921,8 @@ msgstr ""
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr ""
 
@@ -1900,12 +1938,12 @@ msgstr ""
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr ""
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr ""
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr ""
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr ""
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr ""
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr ""
 
@@ -2390,7 +2429,7 @@ msgstr ""
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2406,11 +2445,11 @@ msgstr ""
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr ""
@@ -2419,12 +2458,12 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr ""
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr ""
 
@@ -2591,7 +2632,7 @@ msgstr ""
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr ""
 
@@ -2600,7 +2641,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr ""
@@ -2611,10 +2652,10 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr ""
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr ""
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr ""
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr ""
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr ""
 msgid "In Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr ""
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr ""
 
@@ -4354,12 +4424,12 @@ msgstr ""
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr ""
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr ""
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr ""
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr ""
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr ""
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr ""
 
@@ -6182,7 +6255,7 @@ msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr ""
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr ""
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/tr/messages.po b/src/frontend/src/locales/tr/messages.po
index c9848e8784..a8042142a7 100644
--- a/src/frontend/src/locales/tr/messages.po
+++ b/src/frontend/src/locales/tr/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: tr\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Turkish\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -94,12 +94,13 @@ msgstr "Barkod verisi tara veya gir"
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr "Barkod bağlanamadı"
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Bağlantı"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr "Bu, ilgili barkoda olan bağlantıyı kaldıracaktır"
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Barkodun Bağlantısını Kaldır"
@@ -196,29 +197,42 @@ msgstr "Kopyalandı"
 msgid "Copy"
 msgstr "Kopyala"
 
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
+msgstr "Etiket Yazdırma"
+
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
+msgstr "Rapor Yazdırma"
+
 #: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
-msgstr "Yazdırma"
+#~ msgid "Printing"
+#~ msgstr "Printing"
 
 #: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
-msgstr "Yazdırma başarıyla tamamlandı"
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
 
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Etiket Yazdır"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr "Etiket Yazdırma"
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "Yazdır"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr "Rapor Yazdırma"
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Rapor Yazdır"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr "Rapor Yazdırma"
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Etiket Yazdır"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "Yazdır"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Rapor Yazdır"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Yazdırma Eylemleri"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Etiketler Yazdır"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Raporlar Yazdır"
 
@@ -307,6 +308,41 @@ msgstr "Evet"
 msgid "No"
 msgstr "Hayır"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr "Gecikmiş"
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr "Bir widget seçilmedi"
@@ -378,7 +414,7 @@ msgstr "Abone olduğunuz parça kategorilerinin sayısını gösterin"
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Düşük Stok"
 
@@ -545,7 +581,7 @@ msgstr "Kullanıcı Arayüz Dilini Değiştir"
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Okundu olarak imle"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "Bu ögeyle ilişkilendirilmiş resim kaldırılsın mı?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Kaldır"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Temizle"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Gönder"
 
@@ -715,7 +751,7 @@ msgstr "Resim yükleme başarısız oldu"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "Hatayı Kaydet"
 msgid "A server error occurred"
 msgstr "Bir sunucu hatası oluştu"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Form Hatası"
 
@@ -904,19 +940,20 @@ msgstr "Form Hatası"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "Bir veya daha fazla form alanında hatalar var"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Güncelle"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Kullanıcı adınız"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Parola"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "Şifreyi tekrar girin"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "Kaydol"
@@ -1097,6 +1134,7 @@ msgstr "Sunucu"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "API Sürümü"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Eklentiler"
@@ -1231,7 +1269,7 @@ msgstr "Ara"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Yükleniyor"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "Kayıtlar İçe Aktarılıyor"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr "İçe Aktarılan Satırlar"
 
@@ -1433,65 +1471,65 @@ msgstr "İçe Aktarılan Satırlar"
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Barkod Eylemleri"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Barkod Eylemleri"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr "Barkodu Görüntüle"
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Barkod görüntüle"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Barkodu Bağla"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr "Özel bir barkodu bu ögeye bağla"
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Özel barkodun bağlantısını kaldır"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Düzenle"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "Ögeyi düzenle"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Ögeyi sil"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "Tut"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "İkizini Oluştur"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Ögenin İkizini Oluştur"
 
@@ -1783,8 +1821,8 @@ msgstr "Sistem Ayarları"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Yönetici Merkezi"
 
@@ -1823,7 +1861,7 @@ msgstr "Parçalar"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "Stok"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "Satın Alınıyor"
 
@@ -1854,9 +1892,9 @@ msgstr "Satın Alınıyor"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Satışlar"
 
@@ -1883,8 +1921,8 @@ msgstr "Gruplar"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Bildirimler"
 
@@ -1900,12 +1938,12 @@ msgstr "Gezinme"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "Hakkında"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "Hepsini okundu olarak imle"
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr "Sağlayıcılar"
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr "Üreticiler"
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "Müşteriler"
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr "Tarih"
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "Bilinmeyen model: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Parça"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "Sağlayıcı Parçası"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "Tedarikçi Parçaları"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr "Üretici Parçası"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "Üretici Parçaları"
 
@@ -2289,9 +2328,9 @@ msgstr "Stok Ögesi"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "Stok Kalemleri"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "Stok Konumu"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "Şirketler"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "Proje Kodu"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "Proje Kodları"
 
@@ -2390,7 +2429,7 @@ msgstr "Satın Alma Siparişi"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "Satın Alma Emirleri"
 
@@ -2406,11 +2445,11 @@ msgstr "Satın Alma Sipariş Satırları"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "Satış Siparişi"
@@ -2419,12 +2458,12 @@ msgstr "Satış Siparişi"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "Satış Emirleri"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "Satış Siparişi Gönderisi"
 
@@ -2442,7 +2481,7 @@ msgstr "İade Emri"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "İade Emirleri"
 
@@ -2491,7 +2530,11 @@ msgstr "Sahipler"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr "Etiket Şablonu"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "Etiket Şablonları"
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr "Rapor Şablonu"
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr "Rapor Şablonları"
 
@@ -2576,7 +2617,7 @@ msgstr "Hatalar"
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "Gönderi"
 
@@ -2591,7 +2632,7 @@ msgstr "İnaktif"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "Stok yok"
 
@@ -2600,7 +2641,7 @@ msgstr "Stok yok"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Seri Numarası"
@@ -2611,10 +2652,10 @@ msgstr "Seri Numarası"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Miktar"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr "Parti"
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr "Yapım Çıktısı"
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr "Yapım Çıktısı"
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr "Ayrıldı"
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr "Kaynak Konum"
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr "Abone olundu"
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr "Paketlemeyi Ayarla"
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "Durumu Değiştir"
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr "Note Ekle"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr "Önceden alınmış bir stok ile depola"
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr "Parti Kodu"
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "Seri Numaraları"
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr "Sonraki seri numarası"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "Verilen miktarı tekli ögeler yerine paketler olarak ekle"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "Bu stok ögesi için ilk miktarı giriniz"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "Bu stok ögesi için ilk miktarı giriniz"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "Yeni stok için seri numaralarını girin (veya boş bırakın)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr "Stok Durumu"
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr "Stok Ögesi Ekle"
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "Yükleniyor..."
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr "Varsayılan konuma taşı"
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "Taşı"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "Taşı"
 msgid "In Stock"
 msgstr "Stokta"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Ekle"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Say"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr "Stok Ekle"
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr "Stok Eklendi"
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr "Stok Kaldır"
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr "Stok Kaldırıldı"
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "Stoku Aktar"
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr "Stok Transfer Edildi"
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr "Stok Transfer Edildi"
 msgid "Count Stock"
 msgstr "Stoku Say"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr "Stok Sayıldı"
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr "Stok Durumunu Değiştir"
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr "Stok Durumu Değişti"
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr "Stoku Birleştir"
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr "Stok Birleştirildi"
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr "Stoku Müşteriye Ata"
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr "Stok Müşteriye Atandı"
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr "Stok Ögelerini Sil"
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr "Stok Silindi"
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr "Üst stok konumu"
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "Öge Oluşturuldu"
@@ -4289,11 +4351,19 @@ msgstr "Öge Oluşturuldu"
 msgid "Item Updated"
 msgstr "Öge Güncellendi"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "Öge Silindi"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "Bu ögeyi silmek istediğinize emin misiniz?"
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "Zaten giriş yapıp yapmadığınız kontrol ediliyor"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "Seçim yok"
 
@@ -4354,12 +4424,12 @@ msgstr "Seçim yok"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "Giriş"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "Bir hesabınız yok mu?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
 msgid "Single Sign On"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
+msgstr "Etkin değil"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr "Etkin değil"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr "Tekli Oturum Açma bu sunucu için etkinleştirilmemiş"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "Aşağıdaki e-posta adresleri hesabınızla ilişkilendirilmiştir:"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "Birincil"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "Doğrulandı"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "Doğrulanmadı"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "Birincil Yap"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr "Doğrulama Kodunu Yeniden Gönder"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "E-posta Adresi Ekle"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "E-posta"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "E-Posta adresi"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "E-posta Ekle"
 
@@ -5037,76 +5107,76 @@ msgstr "E-posta Ekle"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr "Geri Al"
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Görüntü Ayarları"
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr "Veri İçe Aktarma"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
-msgstr "Arka Plan Görevleri"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr "Arka Plan Görevleri"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr "Hata Raporları"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "Para Birimleri"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr "Özel Durumlar"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "Özel Birimler"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "Parça Parametreleri"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "Özel Birimler"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "Parça Parametreleri"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr "Sınıf Parametreleri"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr "Stok Sayımı"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr "Konum Türleri"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,17 +5373,17 @@ msgstr "Makineler"
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr "Gelişmiş Seçenekler"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
+msgstr "Gelişmiş Seçenekler"
+
 #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
-msgstr ""
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
 
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
@@ -5392,21 +5446,21 @@ msgstr "Bu InvenTree kurulumu için harici eklentiler etkinleştirilmedi."
 msgid "Plugin Errors"
 msgstr "Eklenti Hataları"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "Barkodlar"
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr "Raporlama"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr "Görüntüleme Seçenekleri"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "Bildirimleri Sil"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "Geçmiş"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "Okunmadı olarak imle"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,17 +5701,43 @@ msgstr "Sorumlu"
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr "Oluşturuldu"
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
+#: src/pages/build/BuildDetail.tsx:196
+#: src/pages/part/PartDetail.tsx:280
+#~ msgid "Unlink custom barcode from part"
+#~ msgstr "Unlink custom barcode from part"
+
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr "Herhangi bir konum"
+
+#: src/pages/build/BuildDetail.tsx:202
+#~ msgid "Build Order updated"
+#~ msgstr "Build Order updated"
+
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
+msgstr "Hedef Konum"
+
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
+msgstr "Oluşturuldu"
+
+#: src/pages/build/BuildDetail.tsx:221
+#~ msgid "Edit build order"
+#~ msgstr "Edit build order"
+
+#: src/pages/build/BuildDetail.tsx:226
+#~ msgid "Duplicate build order"
+#~ msgstr "Duplicate build order"
+
+#: src/pages/build/BuildDetail.tsx:229
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:255
 #: src/pages/sales/ReturnOrderDetail.tsx:220
 #: src/pages/sales/SalesOrderDetail.tsx:231
@@ -5661,16 +5745,11 @@ msgstr "Oluşturuldu"
 msgid "Start Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:196
-#: src/pages/part/PartDetail.tsx:280
-#~ msgid "Unlink custom barcode from part"
-#~ msgstr "Unlink custom barcode from part"
+#: src/pages/build/BuildDetail.tsx:231
+#~ msgid "Delete build order"
+#~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:202
-#~ msgid "Build Order updated"
-#~ msgstr "Build Order updated"
-
-#: src/pages/build/BuildDetail.tsx:203
+#: src/pages/build/BuildDetail.tsx:237
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:263
 #: src/pages/sales/ReturnOrderDetail.tsx:228
 #: src/pages/sales/SalesOrderDetail.tsx:239
@@ -5681,31 +5760,11 @@ msgstr ""
 msgid "Target Date"
 msgstr "Hedef Tarih"
 
-#: src/pages/build/BuildDetail.tsx:211
+#: src/pages/build/BuildDetail.tsx:245
 #: src/tables/sales/SalesOrderLineItemTable.tsx:303
 msgid "Completed"
 msgstr "Tamamlandı"
 
-#: src/pages/build/BuildDetail.tsx:221
-#~ msgid "Edit build order"
-#~ msgstr "Edit build order"
-
-#: src/pages/build/BuildDetail.tsx:226
-#~ msgid "Duplicate build order"
-#~ msgstr "Duplicate build order"
-
-#: src/pages/build/BuildDetail.tsx:231
-#~ msgid "Delete build order"
-#~ msgstr "Delete build order"
-
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
-msgstr "Herhangi bir konum"
-
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
-msgstr "Hedef Konum"
-
 #: src/pages/build/BuildDetail.tsx:276
 msgid "Build Details"
 msgstr "Yapı Ayrıntıları"
@@ -5727,7 +5786,7 @@ msgstr "Tamamlanmayan Çıktılar"
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr "Ayrılan Stok"
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr "Yapı Siparişini Düzenle"
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr "Yapı Siparişi Ekle"
 
@@ -5902,6 +5961,20 @@ msgstr "Yapım Siparişi"
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Web Sitesi"
@@ -5946,7 +6019,7 @@ msgstr "Üretici"
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr "Paket Miktarı"
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr "Siparişte"
 
@@ -6163,8 +6236,8 @@ msgstr "Alt sınıflar"
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr "Yapısal"
 
@@ -6182,7 +6255,7 @@ msgstr "En üst düzey parça sınıfı"
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr "Parça Sınıfını Düzenle"
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr "Bu sınıftaki alt sınıflar için eylem"
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr "Sınıf Eylemleri"
 
@@ -6226,13 +6300,13 @@ msgstr "Sınıf Ayrıntıları"
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr "Yapı Siparişi Ayırmaları"
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr "Satış Siparişi Ayrımaları"
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr "Revizyon"
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr "Anahtar Sözcükler"
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr "Mevcut Stok"
@@ -6337,7 +6411,7 @@ msgstr "Üretimde"
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr "Kilitli"
 
@@ -6381,14 +6455,12 @@ msgstr "Sanal Parça"
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr "Oluşturma Tarihi"
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr "Oluşturan"
 
@@ -6399,7 +6471,7 @@ msgstr "Varsayılan Sağlayıcı"
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr "Fiyat Aralığı"
 
@@ -6448,7 +6520,7 @@ msgstr "İlgili Parçalar"
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr "Parçayı Düzenle"
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr "Parça Ekle"
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr "Parça stokunu aktar"
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr "Emir"
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr "Stok Sipariş Et"
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr "Parça Eylemleri"
 
@@ -6555,36 +6627,36 @@ msgstr "Satış Fiyatlandırması"
 msgid "Sale History"
 msgstr "Satış Geçmişi"
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr "Maksimum"
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr "Minimum"
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr "Stok Değeri"
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr "Minimum Değer"
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr "Maksimum Değer"
@@ -6657,7 +6729,7 @@ msgstr "Toplam Fiyat"
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "Bileşen"
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr "Sipariş Eylemleri"
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr "Müşteri Referansı"
@@ -7025,36 +7097,36 @@ msgstr "Satış Siparişini Tamamla"
 msgid "Ship Order"
 msgstr "Siparişi Gönder"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr "Gönderi Referansı"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr "Gönderim Tarihi"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr "Teslimat Tarihi"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr "Gönderiyi Düzenle"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr "Gönderiyi Tamamla"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr "Bekliyor"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr "Gönderildi"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr "Teslim Edildi"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr "Alt Konumlar"
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr "Harici"
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr "Konum Türü"
 
@@ -7136,7 +7208,7 @@ msgstr "Varsayılan Parçalar"
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr "Stok Konumunu Düzenle"
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr "Bu konumdaki alt konumlar için eylem"
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr "Konum Eylemleri"
 
@@ -7376,28 +7449,28 @@ msgstr "Sütunları Seç"
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr "Excel (.xlsx)"
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr "Veriyi İndir"
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr "Bana atanan siparişleri göster"
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr "Bekliyor"
 
@@ -7420,10 +7493,6 @@ msgstr "Bekliyor"
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr "Gecikmiş"
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr "Sorumlu sahibine göre süz"
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr "Kullanıcıya göre süz"
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "Filtreyi kaldır"
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "Filtre seç"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "Filtre"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr "Tablo Süzgeçleri"
 
@@ -7633,29 +7707,37 @@ msgstr "Sunucu yanlış veri türü döndürdü"
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr "Seçilen Ögeleri Sil"
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr "Seçilen ögeleri silmek istediğinize emin misiniz?"
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr "Seçili kayıtları sil"
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr "Veriyi yenile"
 
@@ -7677,7 +7759,7 @@ msgstr "Parça Bilgisi"
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr "Harici stok"
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr "Türev stok içerir"
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr "Yapılıyor"
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr "Tüketilebilir ögeleri göster"
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr "Fiyatlandırılmış"
 
@@ -7894,7 +7976,7 @@ msgstr "Parça kilitli olduğundan malzeme listesi düzenlenemez"
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr "Montaj"
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr "Etkin birleştirmeleri göster"
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr "Takip Edilebilir"
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr "Bir yapı çıktısına ayrılan ögeleri göster"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr "Türevleri İçer"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr "Sipariş Durumu"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr "Ayrılan Miktar"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr "Mevcut Miktar"
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr "İsteğe bağlı satırları göster"
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr "Test Edilebilir"
 
@@ -8113,38 +8195,34 @@ msgstr "Parçayı Görüntüle"
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr "Alt Kategorileri Dahil Et"
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr "Sonuçlara alt sınıfları ekle"
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr "Yapısal sınıfları göster"
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr "Kullanıcının abone olduğu sınıfları göster"
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr "Yeni Parça Sınıfı"
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr "Parça Sınıfı Ekle"
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr "Seçenekli şablonları göster"
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr "Birimi Var"
 
@@ -8795,145 +8886,154 @@ msgstr "Alınan ögeleri göster"
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr "Minimum stok"
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr "Parçanın aktiflik durumuna göre filtrele"
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr "Parça kilit durumuna göre süz"
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr "Montaj niteliğine göre filtrele"
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr "Alt kategorilerdeki parçaları dahil et"
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr "Bileşen niteliğine göre filtrele"
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr "Test edilebilir özelliğe göre süz"
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr "Takip edilebilirliğine göre filtrele"
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr "Birimi olan parçaları filtrele"
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr "DPN'si Olanlar"
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr "Dahili parça numarası bulunan parçaları filtrele"
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr "Stoğu Var"
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr "Stoğu olan parçaları filtrele"
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr "Düşük stoğu olan parçaları filtrele"
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr "Satın Alınabilir"
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr "Satın alınabilir parçaları filtrele"
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr "Satılabilir"
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr "Satılabilir parçaları filtrele"
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Sanal"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr "Sanal parçaları filtrele"
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr "Sanal Değil"
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr "Şablon Olanlar"
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr "Şablon olan parçalara göre süz"
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr "Revizyon Olanlar"
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr "Revizyon olan parçalara göre süz"
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr "Revizyonu Olanlar"
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr "Revizyonu olan parçalara göre süz"
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr "Fiyatlandırma bilgisi olan parçalara göre süz"
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr "Stokta olan parçalara göre süz"
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr "Kullanıcının abone olduğu parçalara göre süz"
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr "Stok Sayımı Olanlar"
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr "Stok sayımı bilgisi olan parçalara göre süz"
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr "Etkin türevleri göster"
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr "Şablon"
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr "Eklenti kurulu değil"
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr "Eklenti"
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr "Ögeyi Teslim Al"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr "Sipariş stoku"
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr "Gönderi Oluştur"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr "Ögeler"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr "Gönderi ekle"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr "Gönderilen gönderileri göster"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr "Teslim edilen gönderileri gönder"
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr "Geri Al"
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr "Hata raporu silindi"
 msgid "Error Details"
 msgstr "Hata ayrıntıları"
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr "İçe Aktarma Oturununu Sil"
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr "İçe Aktarma Oturumu Oluştur"
 
@@ -9733,18 +9895,17 @@ msgstr "İçe Aktarma Oturumu Oluştur"
 msgid "Uploaded"
 msgstr "Karşıya Yüklendi"
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr "Model Türü"
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr "Hedef modelin türüne göre süz"
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr "İçe aktarma oturumu durumuna göre süz"
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr "Etkinleştirilme durumuna göre süz"
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr "Stokta olan ögeleri göster"
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr "Alt Konumları İçer"
 
@@ -10315,39 +10476,47 @@ msgstr "Yalnızca geçen testleri göster"
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr "Sonuçlarda alt konumları içer"
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
-msgstr "Yapısal konumları göster"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
+msgstr "Sonuçlarda alt konumları içer"
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr "Yapısal konumları göster"
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr "Harici konumları göster"
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr "Konum türü olanlar"
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr "Konum türüne göre süz"
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr "Stok Konumu Ekle"
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr "Eklendi"
diff --git a/src/frontend/src/locales/uk/messages.po b/src/frontend/src/locales/uk/messages.po
index d9d37dc6b3..17336fb1a5 100644
--- a/src/frontend/src/locales/uk/messages.po
+++ b/src/frontend/src/locales/uk/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: uk\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Ukrainian\n"
 "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Посилання"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr ""
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr ""
@@ -196,29 +197,42 @@ msgstr "Скопійовано"
 msgid "Copy"
 msgstr "Копіювати"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "Друк етикетки"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "Друк"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "Надрукувати звіт"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "Друк етикетки"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "Друк"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "Надрукувати звіт"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Дії друку"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "Друк етикеток"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "Друк звітів"
 
@@ -307,6 +308,41 @@ msgstr "Так"
 msgid "No"
 msgstr "Ні"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr ""
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Низький залишок"
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Позначити прочитаним"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "Видалити пов'язане зображення з цього елемента?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Видалити"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Очистити"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Відправити"
 
@@ -715,7 +751,7 @@ msgstr "Не вдалося завантажити зображення"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "Помилка сервера"
 msgid "A server error occurred"
 msgstr "Сталася помилка сервера"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Помилка форми"
 
@@ -904,19 +940,20 @@ msgstr "Помилка форми"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "Існують деякі помилки для одного або декількох полів"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Оновити"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Ваше ім’я користувача"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Пароль"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "Повторіть пароль"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "Реєстрація"
@@ -1097,6 +1134,7 @@ msgstr "Хост"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr ""
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Плагіни"
@@ -1231,7 +1269,7 @@ msgstr "Пошук"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Завантаження"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr ""
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr "Параметри"
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr ""
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr ""
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Переглянути штрих-код"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Редагувати"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Дублювати"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr ""
 
@@ -1783,8 +1821,8 @@ msgstr "Налаштування системи"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Центр адміністрування"
 
@@ -1823,7 +1861,7 @@ msgstr "Частини"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "В наявності"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr ""
 
@@ -1854,9 +1892,9 @@ msgstr ""
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr ""
 
@@ -1883,8 +1921,8 @@ msgstr "Групи"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Сповіщення"
 
@@ -1900,12 +1938,12 @@ msgstr ""
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr ""
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr ""
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr "Постачальники"
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr ""
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr ""
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr ""
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Частина"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "Частина від постачальника"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "Частини від постачальника"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr ""
 
@@ -2289,9 +2328,9 @@ msgstr ""
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr ""
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr ""
 
@@ -2390,7 +2429,7 @@ msgstr ""
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2406,11 +2445,11 @@ msgstr ""
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr ""
@@ -2419,12 +2458,12 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr ""
 
@@ -2442,7 +2481,7 @@ msgstr ""
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr ""
 
@@ -2491,7 +2530,11 @@ msgstr "Власники"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr ""
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr ""
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr ""
 
@@ -2591,7 +2632,7 @@ msgstr ""
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "Немає в наявності"
 
@@ -2600,7 +2641,7 @@ msgstr "Немає в наявності"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Серійний номер"
@@ -2611,10 +2652,10 @@ msgstr "Серійний номер"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Кількість"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr ""
 
@@ -3704,8 +3745,8 @@ msgstr "Елементи складу виділені"
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr ""
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr ""
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr ""
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr ""
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr ""
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr ""
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr ""
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr ""
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "Завантаження..."
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr ""
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "Перемістити"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "Перемістити"
 msgid "In Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Додати"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Кількість"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr ""
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr ""
@@ -4289,11 +4351,19 @@ msgstr ""
 msgid "Item Updated"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr ""
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr ""
 
@@ -4354,12 +4424,12 @@ msgstr ""
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr ""
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "Не маєте облікового запису?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
+msgid "Single Sign On"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
-msgid "Single Sign On"
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "Наступні електронні адреси пов'язані з вашим обліковим записом:"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr ""
 
@@ -5037,76 +5107,76 @@ msgstr ""
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr ""
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Налаштування відображення"
@@ -5251,65 +5301,69 @@ msgstr "Востаннє отримано"
 msgid "Base currency"
 msgstr "Основна валюта"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr ""
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "Параметри частини"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "Параметри частини"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,18 +5373,18 @@ msgstr ""
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr ""
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
 msgstr ""
 
+#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
+
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
 #~ msgstr "Machine types"
@@ -5392,21 +5446,21 @@ msgstr "Зовнішні плагіни не ввімкнені для цьог
 msgid "Plugin Errors"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr "Розмір сторінки"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr "Горизонтальний"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr "Приєднатись до моделі"
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr "Всі об'єкти"
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr ""
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr ""
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr ""
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr ""
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr ""
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr ""
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,47 +5701,32 @@ msgstr ""
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
-#: src/pages/sales/ReturnOrderDetail.tsx:220
-#: src/pages/sales/SalesOrderDetail.tsx:231
-#: src/tables/ColumnRenderers.tsx:252
-msgid "Start Date"
-msgstr ""
-
 #: src/pages/build/BuildDetail.tsx:196
 #: src/pages/part/PartDetail.tsx:280
 #~ msgid "Unlink custom barcode from part"
 #~ msgstr "Unlink custom barcode from part"
 
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:202
 #~ msgid "Build Order updated"
 #~ msgstr "Build Order updated"
 
-#: src/pages/build/BuildDetail.tsx:203
-#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
-#: src/pages/sales/ReturnOrderDetail.tsx:228
-#: src/pages/sales/SalesOrderDetail.tsx:239
-#: src/tables/ColumnRenderers.tsx:260
-#: src/tables/part/PartPurchaseOrdersTable.tsx:100
-#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
-#: src/tables/sales/SalesOrderLineItemTable.tsx:123
-msgid "Target Date"
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:211
-#: src/tables/sales/SalesOrderLineItemTable.tsx:303
-msgid "Completed"
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:221
@@ -5694,16 +5737,32 @@ msgstr ""
 #~ msgid "Duplicate build order"
 #~ msgstr "Duplicate build order"
 
+#: src/pages/build/BuildDetail.tsx:229
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:255
+#: src/pages/sales/ReturnOrderDetail.tsx:220
+#: src/pages/sales/SalesOrderDetail.tsx:231
+#: src/tables/ColumnRenderers.tsx:252
+msgid "Start Date"
+msgstr ""
+
 #: src/pages/build/BuildDetail.tsx:231
 #~ msgid "Delete build order"
 #~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
+#: src/pages/build/BuildDetail.tsx:237
+#: src/pages/purchasing/PurchaseOrderDetail.tsx:263
+#: src/pages/sales/ReturnOrderDetail.tsx:228
+#: src/pages/sales/SalesOrderDetail.tsx:239
+#: src/tables/ColumnRenderers.tsx:260
+#: src/tables/part/PartPurchaseOrdersTable.tsx:100
+#: src/tables/sales/ReturnOrderLineItemTable.tsx:143
+#: src/tables/sales/SalesOrderLineItemTable.tsx:123
+msgid "Target Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
+#: src/pages/build/BuildDetail.tsx:245
+#: src/tables/sales/SalesOrderLineItemTable.tsx:303
+msgid "Completed"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:276
@@ -5727,7 +5786,7 @@ msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr ""
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr ""
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr ""
 
@@ -5902,6 +5961,20 @@ msgstr ""
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr ""
@@ -5946,7 +6019,7 @@ msgstr ""
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr ""
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr ""
 
@@ -6163,8 +6236,8 @@ msgstr "Підкатегорії"
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr "Структурна"
 
@@ -6182,7 +6255,7 @@ msgstr "Коренева категорія"
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr ""
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr ""
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr ""
 
@@ -6226,13 +6300,13 @@ msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr ""
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr ""
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr ""
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr ""
@@ -6337,7 +6411,7 @@ msgstr ""
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr ""
 
@@ -6381,14 +6455,12 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr ""
 
@@ -6399,7 +6471,7 @@ msgstr "Типовий постачальник"
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr ""
 
@@ -6448,7 +6520,7 @@ msgstr ""
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr ""
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr ""
 
@@ -6555,36 +6627,36 @@ msgstr ""
 msgid "Sale History"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr ""
@@ -6657,7 +6729,7 @@ msgstr ""
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "Компонент"
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr ""
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr ""
@@ -7025,36 +7097,36 @@ msgstr ""
 msgid "Ship Order"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr ""
 
@@ -7136,7 +7208,7 @@ msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr ""
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr ""
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr ""
 
@@ -7376,28 +7449,28 @@ msgstr ""
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr ""
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr ""
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr ""
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr ""
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr ""
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr ""
 
@@ -7420,10 +7493,6 @@ msgstr ""
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr ""
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr ""
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr ""
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr ""
 
@@ -7633,29 +7707,37 @@ msgstr ""
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr ""
 
@@ -7677,7 +7759,7 @@ msgstr ""
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr ""
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr ""
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr ""
 
@@ -7894,7 +7976,7 @@ msgstr "Біл матеріалів не можна редагувати, том
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr "Збірка"
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr ""
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr ""
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr "Включити підкатегорії"
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr "Показати структурні категорії"
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr "Нова категорія"
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr "Додати категорію"
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr ""
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr "Фільтрувати за атрибутом \"Компонент\""
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr ""
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr ""
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/vi/messages.po b/src/frontend/src/locales/vi/messages.po
index f620935719..065cb08917 100644
--- a/src/frontend/src/locales/vi/messages.po
+++ b/src/frontend/src/locales/vi/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: vi\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Vietnamese\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "Liên kết"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr "Thao tác này sẽ xóa liên kết đến mã vạch được liên kết"
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "Gỡ liên kết mã vạch"
@@ -196,29 +197,42 @@ msgstr "Đã sao chép"
 msgid "Copy"
 msgstr "Sao chép"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "In nhãn"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "In"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "In báo cáo"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "In nhãn"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "In"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "In báo cáo"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "Các hành động in"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "In nhãn"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "In báo cáo"
 
@@ -307,6 +308,41 @@ msgstr "Đồng ý"
 msgid "No"
 msgstr "Không"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr "Quá hạn"
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "Còn ít hàng"
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "Đánh dấu đã đọc"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "Xóa hình liên quan khỏi mục này?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "Xoá"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "Clear"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "Gửi"
 
@@ -715,7 +751,7 @@ msgstr "Tải ảnh thất bại"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "Lỗi máy chủ"
 msgid "A server error occurred"
 msgstr "Xảy ra lỗi máy chủ"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "Lỗi form"
 
@@ -904,19 +940,20 @@ msgstr "Lỗi form"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "Lỗi nhập liệu"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "Cập nhật"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "Tên người dùng của bạn"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "Mật khẩu"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "Lặp lại mật khẩu"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "Đăng ký"
@@ -1097,6 +1134,7 @@ msgstr "Host"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "Phiên bản API"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "Plugins"
@@ -1231,7 +1269,7 @@ msgstr "Tìm kiếm"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "Đang tải"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "Nhập hồ sơ"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr ""
 
@@ -1433,65 +1471,65 @@ msgstr ""
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "Chức năng mã vạch"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "Chức năng mã vạch"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "Xem mã vạch"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "Liên kết mã vạch"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr "Liên kết mã vạch tùy chỉnh với mục này"
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "Gỡ bỏ mã vạch tùy chỉnh"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "Sửa"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "Chỉnh sửa mặt hàng"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "Xoá mặt hàng"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "Chờ"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "Nhân bản"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "Nhân bản hàng hóa"
 
@@ -1783,8 +1821,8 @@ msgstr "Thiết lập hệ thống"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "Trung tâm quản trị"
 
@@ -1823,7 +1861,7 @@ msgstr "Phụ tùng"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "Kho hàng"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "Mua sắm"
 
@@ -1854,9 +1892,9 @@ msgstr "Mua sắm"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "Bán hàng"
 
@@ -1883,8 +1921,8 @@ msgstr "Nhóm"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "Thông báo"
 
@@ -1900,12 +1938,12 @@ msgstr "Điều hướng"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "Giới thiệu"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "Đánh dấu tất cả là đã đọc"
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr "Nhà cung cấp"
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr "Nhà sản xuất"
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "Khách hàng"
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr "Ngày"
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "Model không rõ: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "Phụ kiện"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "Phụ kiện nhà cung cấp"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "Nhà cung cấp phụ kiện"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr "Phụ kiện nhà sản xuất"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "Nhà sản xuất phụ kiện"
 
@@ -2289,9 +2328,9 @@ msgstr "Hàng trong kho"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "Hàng trong kho"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "Vị trí kho hàng"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "Doanh nghiệp"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "Mã dự án"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "Mã dự án"
 
@@ -2390,7 +2429,7 @@ msgstr "Đơn đặt mua"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "Đơn hàng mua"
 
@@ -2406,11 +2445,11 @@ msgstr "Các dòng đơn đặt hàng"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "Đơn đặt bán"
@@ -2419,12 +2458,12 @@ msgstr "Đơn đặt bán"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "Đơn hàng bán"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "Vận chuyển đơn hàng"
 
@@ -2442,7 +2481,7 @@ msgstr "Đơn hàng trả lại"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "Đơn hàng trả lại"
 
@@ -2491,7 +2530,11 @@ msgstr "Chủ sở hữu"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr "Mẫu nhãn tem"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "Mẫu nhãn tem"
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr "Mẫu báo cáo"
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr "Mẫu báo cáo"
 
@@ -2576,7 +2617,7 @@ msgstr ""
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "Lô hàng"
 
@@ -2591,7 +2632,7 @@ msgstr "Không hoạt động"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "Hết hàng"
 
@@ -2600,7 +2641,7 @@ msgstr "Hết hàng"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "Số sê-ri"
@@ -2611,10 +2652,10 @@ msgstr "Số sê-ri"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "Số lượng"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr ""
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr ""
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr ""
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr ""
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr "Vị trí nguồn cung"
 
@@ -3704,8 +3745,8 @@ msgstr ""
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr ""
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr "Điều chỉnh bao bì"
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "Thay đổi trạng thái"
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr "Thêm ghi chú"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr "Cửa hàng đã nhận hàng"
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr "Mã lô hàng"
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "Số sê-ri"
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr "Số seri kế tiếp"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "Thêm số lượng đã có theo gói thay vì các mục đơn lẻ"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "Nhập số lượng khởi đầu cho kho hàng này"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "Nhập số lượng khởi đầu cho kho hàng này"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "Điền số sê-ri cho kho mới (hoặc để trống)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr "Trạng thái kho"
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr "Thêm mặt hàng trong kho"
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr ""
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "Đang tải..."
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr "Đến vị trí mặc định"
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "Di chuyển"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "Di chuyển"
 msgid "In Stock"
 msgstr "Còn hàng"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "Thêm"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "Đếm"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr "Thêm kho"
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr "Xoá kho"
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "Chuyển kho"
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr "Kiểm kê"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr "Đổi trạng thái kho"
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr "Gộp kho"
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr "Xóa mặt hàng trong kho"
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr "Vị trí kho lớn"
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr ""
 msgid "The request timed out"
 msgstr ""
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "Mặt hàng đã được tạo"
@@ -4289,11 +4351,19 @@ msgstr "Mặt hàng đã được tạo"
 msgid "Item Updated"
 msgstr "Mặt hàng đã được cập nhật"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "Đã xóa mặt hàng"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "Bạn có chắc chắn muốn xóa đối tượng này?"
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "Đang kiểm tra trạng thái đăng nhập của bạn"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "Không có lựa chọn"
 
@@ -4354,12 +4424,12 @@ msgstr "Không có lựa chọn"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "Đăng nhập"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "Chưa có tài khoản?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
 msgid "Single Sign On"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
+msgstr "Không kích hoạt"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr "Không kích hoạt"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr "Máy chủ này chưa bật chức năng đăng nhập một lần"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "Địa chỉ email sau đã được liên kết với tài khoản của bạn:"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "Chính"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "Đã xác minh"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "Chưa xác minh"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "Chọn mặc định"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr "Gửi lại xác minh"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "Thêm địa chỉ email"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "Email"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "Địa chỉ Email"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "Thêm email"
 
@@ -5037,76 +5107,76 @@ msgstr "Thêm email"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr "Thu hồi"
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "Cài đặt hiển thị"
@@ -5251,65 +5301,69 @@ msgstr ""
 msgid "Base currency"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr "Nhập dữ liệu"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
-msgstr "Tác vụ Chạy nền"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr ""
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr "Tác vụ Chạy nền"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr "Báo cáo lỗi"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "Tiền tệ"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr "Tuỳ chọn states"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "Tuỳ chọn đơn vị"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "Tham số phụ kiện"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "Tuỳ chọn đơn vị"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "Tham số phụ kiện"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr "Thông số danh mục"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr "Kiểm kê"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr "Loại vị trí"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,17 +5373,17 @@ msgstr "Máy móc"
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr "Tùy chọn Nâng cao"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
+msgstr "Tùy chọn Nâng cao"
+
 #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
-msgstr ""
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
 
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
@@ -5392,21 +5446,21 @@ msgstr "Phần bổ sung bên ngoài chưa được bật cho cài đặt."
 msgid "Plugin Errors"
 msgstr "Lỗi plugins"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr ""
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "Mã vạch"
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr "Báo cáo"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr "Tùy chọn hiển thị"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "Xóa thông báo"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "Lịch sử"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "Đánh dấu chưa đọc"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,17 +5701,43 @@ msgstr "Chịu trách nhiệm"
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr "Đã tạo"
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
+#: src/pages/build/BuildDetail.tsx:196
+#: src/pages/part/PartDetail.tsx:280
+#~ msgid "Unlink custom barcode from part"
+#~ msgstr "Unlink custom barcode from part"
+
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr "Vị trí bất kỳ"
+
+#: src/pages/build/BuildDetail.tsx:202
+#~ msgid "Build Order updated"
+#~ msgstr "Build Order updated"
+
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
+msgstr "Địa điểm đích"
+
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
+msgstr "Đã tạo"
+
+#: src/pages/build/BuildDetail.tsx:221
+#~ msgid "Edit build order"
+#~ msgstr "Edit build order"
+
+#: src/pages/build/BuildDetail.tsx:226
+#~ msgid "Duplicate build order"
+#~ msgstr "Duplicate build order"
+
+#: src/pages/build/BuildDetail.tsx:229
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:255
 #: src/pages/sales/ReturnOrderDetail.tsx:220
 #: src/pages/sales/SalesOrderDetail.tsx:231
@@ -5661,16 +5745,11 @@ msgstr "Đã tạo"
 msgid "Start Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:196
-#: src/pages/part/PartDetail.tsx:280
-#~ msgid "Unlink custom barcode from part"
-#~ msgstr "Unlink custom barcode from part"
+#: src/pages/build/BuildDetail.tsx:231
+#~ msgid "Delete build order"
+#~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:202
-#~ msgid "Build Order updated"
-#~ msgstr "Build Order updated"
-
-#: src/pages/build/BuildDetail.tsx:203
+#: src/pages/build/BuildDetail.tsx:237
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:263
 #: src/pages/sales/ReturnOrderDetail.tsx:228
 #: src/pages/sales/SalesOrderDetail.tsx:239
@@ -5681,31 +5760,11 @@ msgstr ""
 msgid "Target Date"
 msgstr "Ngày mục tiêu"
 
-#: src/pages/build/BuildDetail.tsx:211
+#: src/pages/build/BuildDetail.tsx:245
 #: src/tables/sales/SalesOrderLineItemTable.tsx:303
 msgid "Completed"
 msgstr "Đã hoàn thành"
 
-#: src/pages/build/BuildDetail.tsx:221
-#~ msgid "Edit build order"
-#~ msgstr "Edit build order"
-
-#: src/pages/build/BuildDetail.tsx:226
-#~ msgid "Duplicate build order"
-#~ msgstr "Duplicate build order"
-
-#: src/pages/build/BuildDetail.tsx:231
-#~ msgid "Delete build order"
-#~ msgstr "Delete build order"
-
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
-msgstr "Vị trí bất kỳ"
-
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
-msgstr "Địa điểm đích"
-
 #: src/pages/build/BuildDetail.tsx:276
 msgid "Build Details"
 msgstr "Chi tiết bản dựng"
@@ -5727,7 +5786,7 @@ msgstr "Đầu ra chưa hoàn hiện"
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr "Kho hàng đã phân bổ"
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr "Sửa đơn đặt bản dựng"
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr "Tạo đơn đặt bản dựng"
 
@@ -5902,6 +5961,20 @@ msgstr "Xây dựng đơn hàng"
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "Trang web"
@@ -5946,7 +6019,7 @@ msgstr "Nhà sản xuất"
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr "Số lượng gói"
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr "On Order"
 
@@ -6163,8 +6236,8 @@ msgstr "Phụ mục"
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr "Cấu trúc"
 
@@ -6182,7 +6255,7 @@ msgstr "Danh mục top"
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr "Sửa"
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr "Thao tác"
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr "Thao tác"
 
@@ -6226,13 +6300,13 @@ msgstr "Chi tiết"
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr "Phân bổ đơn hàng bản dựng"
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr "Phân bổ đơn hàng bán"
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr "Sửa đổi"
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr "Từ khóa"
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr "Số hàng tồn"
@@ -6337,7 +6411,7 @@ msgstr "Đang sản xuất"
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr "Khóa"
 
@@ -6381,14 +6455,12 @@ msgstr "Nguyên liệu ảo"
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr "Ngày tạo"
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr "Tạo bởi"
 
@@ -6399,7 +6471,7 @@ msgstr "Nhà cung ứng mặc định"
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr "Khoảng giá"
 
@@ -6448,7 +6520,7 @@ msgstr "Phụ kiện liên quan"
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr "Sửa phụ kiện"
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr "Thêm nguyên liệu"
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr "Chuyển kho nguyên liệu"
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr ""
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr ""
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr "Thao tác"
 
@@ -6555,36 +6627,36 @@ msgstr "Giá sale"
 msgid "Sale History"
 msgstr "Lịch sử sale"
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr "Tối đa"
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr "Tối thiểu"
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr ""
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr ""
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr ""
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr "Giá trị tối thiểu"
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr "Giá trị tối đa"
@@ -6657,7 +6729,7 @@ msgstr "Tổng tiền"
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "Thành phần"
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr "Chức năng đơn đặt"
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr "Tham chiếu khách hàng"
@@ -7025,36 +7097,36 @@ msgstr "Hoàn thành đơn hàng sale"
 msgid "Ship Order"
 msgstr "Thứ tự vận đơn"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr "Ngày giao hàng"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr "Địa chỉ phụ"
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr "Bên ngoài"
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr "Loại vị trí"
 
@@ -7136,7 +7208,7 @@ msgstr "Nguyên liệu mặc định"
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr "Sửa vị trí kho"
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr "Thao tác cho vị trí phụ tại vị trí này"
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr "Thao tác vị trí"
 
@@ -7376,28 +7449,28 @@ msgstr "Chọn cột"
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr "Excel (.xlsx)"
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr "Tải Dữ Liệu về"
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr "Hiển thị đơn đặt phân công cho tôi"
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr "Nổi bật"
 
@@ -7420,10 +7493,6 @@ msgstr "Nổi bật"
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr "Quá hạn"
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr ""
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr ""
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "Xoá bộ lọc"
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "Chọn bộ lọc"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "Bộ lọc"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr "Bộ lọc bảng"
 
@@ -7633,29 +7707,37 @@ msgstr "Máy chủ trả chưa đúng dữ liệu"
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr "Xóa mục đã chọn"
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr "Bạn muốn xóa các mục đã chọn?"
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr "Xóa bản ghi được chọn"
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr "Làm mới dữ liệu"
 
@@ -7677,7 +7759,7 @@ msgstr "Thông tin nguyên liệu"
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr "Kho ngoài"
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr "Bao gồm kho biến thể"
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr "Đang dựng"
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr "Hiện items tiêu hao"
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr "Có định giá"
 
@@ -7894,7 +7976,7 @@ msgstr "Không thể sửa BOM, do nguyên liệu bị khoá"
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr "Lắp ráp"
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr "Hiện dây chuyền đang hoạt động"
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr "Có thể theo dõi"
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr "Bao gồm các biến thể"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr ""
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr ""
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr ""
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr ""
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr "Bao gồm danh mục con"
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr ""
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr ""
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr ""
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr "Có đơn vị"
 
@@ -8795,145 +8886,154 @@ msgstr ""
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr "Kho tối thiểu"
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr "Lọc theo trạng thái mở phụ kiện"
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr "Lọc theo thuộc tính lắp ráp"
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr "Bao gồm phụ kiên trong danh mục con"
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr "Lọc theo thuộc tính thành phần"
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr "Lọc theo thuộc tính có thể theo dõi"
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr "Lọc theo phụ kiện có chứa đơn vị"
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr "Có IPN"
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr "Lọc theo sản phẩm có số sản phẩm nội bộ"
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr "Có kho"
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr "Lọc theo sản phẩm có trong kho"
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr "Lọc theo sản phẩm có ít hàng"
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr "Có thể mua"
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr "Lọc theo sản phẩm có thể mua"
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr "Có thể bán"
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr "Lọc theo sản phẩm có thể bán"
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "Ảo"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr "Lọc theo sản phẩm ảo"
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr "Không ảo"
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr ""
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr ""
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr "Phần bổ sung chưa được cài đặt"
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr "Phần bổ sung"
 
@@ -9438,37 +9537,45 @@ msgstr ""
 msgid "Receive Item"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr ""
@@ -9506,38 +9613,85 @@ msgstr ""
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr ""
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr "Thu hồi"
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr ""
@@ -9659,6 +9813,14 @@ msgstr ""
 msgid "Error Details"
 msgstr ""
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr ""
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr ""
 
@@ -9733,18 +9895,17 @@ msgstr ""
 msgid "Uploaded"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr ""
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr ""
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr ""
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr ""
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr ""
 
@@ -10315,39 +10476,47 @@ msgstr ""
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr ""
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
 msgstr ""
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr ""
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr ""
diff --git a/src/frontend/src/locales/zh_Hans/messages.po b/src/frontend/src/locales/zh_Hans/messages.po
index 88181ff5a6..9f23c28a67 100644
--- a/src/frontend/src/locales/zh_Hans/messages.po
+++ b/src/frontend/src/locales/zh_Hans/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: zh\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Chinese Simplified\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "链接"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr "这将删除关联条形码的链接"
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "解绑条形码"
@@ -196,29 +197,42 @@ msgstr "已复制"
 msgid "Copy"
 msgstr "复制"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "打印标签"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "打印"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "打印报告"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "打印标签"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "打印"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "打印报告"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "打印操作"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "打印标签"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "列印報告"
 
@@ -307,6 +308,41 @@ msgstr "是"
 msgid "No"
 msgstr "否"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr "逾期"
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr "未选中小组件"
@@ -378,7 +414,7 @@ msgstr "显示订阅的零件类别数量"
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "低库存"
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "标记为已读"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "删除与此项关联的图片?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "移除"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "清除"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "提交"
 
@@ -715,7 +751,7 @@ msgstr "图片上传失败"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "服务器错误"
 msgid "A server error occurred"
 msgstr "服务器出错。"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "表单错误"
 
@@ -904,19 +940,20 @@ msgstr "表单错误"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "一个或多个表单字段存在错误"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "更新"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "你的用户名"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "密码"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "再次输入密码"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "注册"
@@ -1097,6 +1134,7 @@ msgstr "主机"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "API 版本"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "插件"
@@ -1231,7 +1269,7 @@ msgstr "搜索"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "正在加载"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "导入记录"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr "导入的行"
 
@@ -1433,65 +1471,65 @@ msgstr "导入的行"
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr "选项"
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "条形码操作"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "条形码操作"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "查看条形码"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "关联二维码"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr "将自定义条形码链接到此项目"
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "解绑自定义条形码链接"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "编辑"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "编辑项目"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "删除项目"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "挂起"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "复制"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "重复项目"
 
@@ -1783,8 +1821,8 @@ msgstr "系统设置"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "管理中心"
 
@@ -1823,7 +1861,7 @@ msgstr "零件"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "库存"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "采购中"
 
@@ -1854,9 +1892,9 @@ msgstr "采购中"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "销售"
 
@@ -1883,8 +1921,8 @@ msgstr "群组"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "通知"
 
@@ -1900,12 +1938,12 @@ msgstr "导航栏"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "关于"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "全部标记为已读"
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr "供应商"
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr "制造商"
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "客户"
 
@@ -2058,8 +2096,8 @@ msgstr "插件信息"
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr "日期"
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "未知模型: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "零件"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "供应商零件"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "供应商零件"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr "制造商零件"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "制造商零件"
 
@@ -2289,9 +2328,9 @@ msgstr "库存项"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "库存项"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "库存地点"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "公司"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "项目编码"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "项目编码"
 
@@ -2390,7 +2429,7 @@ msgstr "采购订单"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "采购订单"
 
@@ -2406,11 +2445,11 @@ msgstr "采购订单行"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "销售订单"
@@ -2419,12 +2458,12 @@ msgstr "销售订单"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "销售订单"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "销售订单配送"
 
@@ -2442,7 +2481,7 @@ msgstr "退货订单"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "退货订单"
 
@@ -2491,7 +2530,11 @@ msgstr "所有者"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr "标签模板"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "标签模板"
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr "报告模板"
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr "报告模板"
 
@@ -2576,7 +2617,7 @@ msgstr "错误"
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "配送"
 
@@ -2591,7 +2632,7 @@ msgstr "未激活"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "无库存"
 
@@ -2600,7 +2641,7 @@ msgstr "无库存"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "序列号"
@@ -2611,10 +2652,10 @@ msgstr "序列号"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "数量"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr "批次"
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr "生产产出"
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr "生产产出"
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr "已分配"
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr "来源地点"
 
@@ -3704,8 +3745,8 @@ msgstr "分配的库存项目"
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr "已订阅"
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr "调整封包"
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "更改状态"
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr "添加备注"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr "存储已收到的库存"
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr "批号"
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "序列号"
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr "下一个序列号"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "将给定的数量添加为包,而不是单个项目"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "输入此库存项的初始数量"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "输入此库存项的初始数量"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "输入新库存的序列号(或留空)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr "库存状态"
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr "编辑库存项"
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr "选择要安装的零件"
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "正在加载..."
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr "移动到默认位置"
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "移动"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "移动"
 msgid "In Stock"
 msgstr "入库"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "添加"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "总计"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr "添加库存"
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr "移除库存"
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "转移库存"
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr "库存数量"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr "更改库存状态"
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr "合并库存"
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr "删除库存项"
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr "上级库存地点"
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr "超时"
 msgid "The request timed out"
 msgstr "请求已超时"
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "项目已创建"
@@ -4289,11 +4351,19 @@ msgstr "项目已创建"
 msgid "Item Updated"
 msgstr "项目已更新"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "项目已删除"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "确实要删除此项目吗?"
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "检查您是否已经登录"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "未选择"
 
@@ -4354,12 +4424,12 @@ msgstr "未选择"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "登录"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "没有帐户?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
 msgid "Single Sign On"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
+msgstr "未启用"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr "未启用"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr "此服务器未启用单点登录"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "以下电子邮件地址与您的账户相关联:"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "主要的"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "已验证"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "未验证"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "设为首选"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr "重新发送验证"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "添加电子邮件地址"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "邮箱"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "邮箱地址"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "添加电子邮件"
 
@@ -5037,76 +5107,76 @@ msgstr "添加电子邮件"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr "撤销"
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "显示设置"
@@ -5251,65 +5301,69 @@ msgstr "上次获取时间"
 msgid "Base currency"
 msgstr "基准货币"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr "数据导入"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr "扫描条码"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
-msgstr "后台任务"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
+msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr "扫描条码"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr "后台任务"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr "错误报告"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "币种"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr "自定状态"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "自定义单位"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "零件参数"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "自定义单位"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "零件参数"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr "类别参数"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr "库存盘点"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr "位置类型"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,17 +5373,17 @@ msgstr "设备"
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr "高级选项"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
+msgstr "高级选项"
+
 #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
-msgstr ""
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
 
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
@@ -5392,21 +5446,21 @@ msgstr "此 InvenTree 未启用外部插件。"
 msgid "Plugin Errors"
 msgstr "插件错误"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr "页面尺寸"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr "横屏模式"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr "附加到模型"
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr "所有单位"
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "条形码"
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr "报告"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr "显示选项"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "删除通知"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "历史记录"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "标记为未读"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,17 +5701,43 @@ msgstr "责任人"
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr "已创建"
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
+#: src/pages/build/BuildDetail.tsx:196
+#: src/pages/part/PartDetail.tsx:280
+#~ msgid "Unlink custom barcode from part"
+#~ msgstr "Unlink custom barcode from part"
+
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr "任意地点"
+
+#: src/pages/build/BuildDetail.tsx:202
+#~ msgid "Build Order updated"
+#~ msgstr "Build Order updated"
+
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
+msgstr "目标地点"
+
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
+msgstr "已创建"
+
+#: src/pages/build/BuildDetail.tsx:221
+#~ msgid "Edit build order"
+#~ msgstr "Edit build order"
+
+#: src/pages/build/BuildDetail.tsx:226
+#~ msgid "Duplicate build order"
+#~ msgstr "Duplicate build order"
+
+#: src/pages/build/BuildDetail.tsx:229
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:255
 #: src/pages/sales/ReturnOrderDetail.tsx:220
 #: src/pages/sales/SalesOrderDetail.tsx:231
@@ -5661,16 +5745,11 @@ msgstr "已创建"
 msgid "Start Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:196
-#: src/pages/part/PartDetail.tsx:280
-#~ msgid "Unlink custom barcode from part"
-#~ msgstr "Unlink custom barcode from part"
+#: src/pages/build/BuildDetail.tsx:231
+#~ msgid "Delete build order"
+#~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:202
-#~ msgid "Build Order updated"
-#~ msgstr "Build Order updated"
-
-#: src/pages/build/BuildDetail.tsx:203
+#: src/pages/build/BuildDetail.tsx:237
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:263
 #: src/pages/sales/ReturnOrderDetail.tsx:228
 #: src/pages/sales/SalesOrderDetail.tsx:239
@@ -5681,31 +5760,11 @@ msgstr ""
 msgid "Target Date"
 msgstr "预计日期"
 
-#: src/pages/build/BuildDetail.tsx:211
+#: src/pages/build/BuildDetail.tsx:245
 #: src/tables/sales/SalesOrderLineItemTable.tsx:303
 msgid "Completed"
 msgstr "已完成"
 
-#: src/pages/build/BuildDetail.tsx:221
-#~ msgid "Edit build order"
-#~ msgstr "Edit build order"
-
-#: src/pages/build/BuildDetail.tsx:226
-#~ msgid "Duplicate build order"
-#~ msgstr "Duplicate build order"
-
-#: src/pages/build/BuildDetail.tsx:231
-#~ msgid "Delete build order"
-#~ msgstr "Delete build order"
-
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
-msgstr "任意地点"
-
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
-msgstr "目标地点"
-
 #: src/pages/build/BuildDetail.tsx:276
 msgid "Build Details"
 msgstr "生产详情"
@@ -5727,7 +5786,7 @@ msgstr "未出产"
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr "已分配的库存"
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr "编辑生产订单"
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr "添加生产订单"
 
@@ -5902,6 +5961,20 @@ msgstr "生产订单"
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "网站"
@@ -5946,7 +6019,7 @@ msgstr "制造商"
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr "包装数量"
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr "订购中"
 
@@ -6163,8 +6236,8 @@ msgstr "子类别"
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr "结构性"
 
@@ -6182,7 +6255,7 @@ msgstr "最高级零件类别"
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr "编辑零件类别"
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr "对此类别中零件的操作"
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr "类别操作"
 
@@ -6226,13 +6300,13 @@ msgstr "类别详情"
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr "分配生产订单"
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr "分配销售订单"
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr "版本"
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr "关键词"
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr "可用库存"
@@ -6337,7 +6411,7 @@ msgstr "生产中"
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr "已锁定"
 
@@ -6381,14 +6455,12 @@ msgstr "虚拟零件"
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr "创建日期"
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr "创建人"
 
@@ -6399,7 +6471,7 @@ msgstr "默认供应商"
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr "价格范围"
 
@@ -6448,7 +6520,7 @@ msgstr "关联零件"
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr "编辑零件"
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr "添加零件"
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr "转移零件库存"
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr "订单"
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr "订单库存"
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr "零件选项"
 
@@ -6555,36 +6627,36 @@ msgstr "销售价格"
 msgid "Sale History"
 msgstr "销售记录"
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr "最大值"
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr "排定"
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr "最小值"
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr "数量是投机的"
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr "没有提供数量的可用日期"
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr "指定日期已过"
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr "计划数量"
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr "预期的数量"
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr "编辑盘点条目"
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr "删除盘点条目"
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr "生成盘点报告"
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr "计划盘点报告"
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr "库存价值"
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr "盘点报告"
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr "最小值"
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr "最大值"
@@ -6657,7 +6729,7 @@ msgstr "总价"
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "组件"
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr "订单操作"
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr "客户参考"
@@ -7025,36 +7097,36 @@ msgstr "完成销售订单"
 msgid "Ship Order"
 msgstr "装货单"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr "配送参考"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr "已分配的项"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr "跟踪单号"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr "发票号码"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr "发货日期"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr "送达日期"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr "发货详情"
 
@@ -7062,45 +7134,45 @@ msgstr "发货详情"
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr "编辑配送"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr "取消发货"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr "完成配送"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr "待定"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr "已配送"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr "已送达"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr "发送货物"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr "次级地点"
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr "外部"
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr "位置类型"
 
@@ -7136,7 +7208,7 @@ msgstr "默认零件"
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr "编辑库存地点"
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr "对此位置中的子位置执行的操作"
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr "位置操作"
 
@@ -7376,28 +7449,28 @@ msgstr "选择列"
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr "Excel (.xlsx)"
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr "下载数据"
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr "显示分配给我的订单"
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr "未完成"
 
@@ -7420,10 +7493,6 @@ msgstr "未完成"
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr "逾期"
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr "根据负责人进行筛选"
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr "按用户筛选"
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "移除过滤器"
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "选择过滤器"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "过滤器"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr "表格筛选"
 
@@ -7633,29 +7707,37 @@ msgstr "服务器返回了错误的数据类型"
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr "删除所选项目"
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr "确定要删除所选的项目吗?"
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr "该操作无法撤销"
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr "删除选中的记录"
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr "刷新数据"
 
@@ -7677,7 +7759,7 @@ msgstr "零件信息"
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr "外部库存"
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr "包括变体库存"
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr "正在生产"
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr "显示可消耗项目"
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr "是否有价格"
 
@@ -7894,7 +7976,7 @@ msgstr "无法编辑材料清单,因为零件已锁定"
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr "装配"
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr "显示活动装配体"
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr "可追踪"
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr "显示分配给构建输出的项目"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr "包含变体"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr "订单状态"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr "已分配数量"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr "可用数量"
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr "显示可选项目"
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr "可测试"
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr "您已订阅此类别的通知"
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr "包含子类别"
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr "在结果中包含子类别"
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr "显示结构性类别"
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr "显示用户订阅的类别"
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr "新建零件类别"
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr "增加零件类别"
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr "显示有选项的模板"
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr "有单位"
 
@@ -8795,145 +8886,154 @@ msgstr "显示已收到的条目"
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr "最低库存数"
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr "按零件活动状态筛选"
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr "按零件锁定状态筛选"
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr "按装配属性筛选"
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr "包括子类别中的零件"
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr "按组件属性筛选"
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr "按可跟踪属性筛选"
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr "按可跟踪属性筛选"
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr "按拥有单位的零件筛选"
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr "有内部零件编码"
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr "按具有内部零件编号的零件筛选"
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr "有库存"
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr "按有库存的零件筛选"
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr "按库存少的零件筛选"
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr "可购买"
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr "按可购买的零件筛选"
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr "可销售"
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr "按可出售的零件筛选"
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "虚拟"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr "按虚拟零件筛选"
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr "非虚拟的"
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr "是模板"
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr "按模板部分筛选零件"
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr "是否修订"
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr "按修订零件筛选"
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr "有修订"
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr "按有修订的零件筛选"
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr "按有定价信息的零件筛选"
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr "按有可用库存的零件筛选"
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr "按用户订阅的零件筛选"
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr "有盘点"
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr "按有盘点信息的零件筛选"
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr "显示激活的变体"
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr "模板"
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr "插件未安装"
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr "插件"
 
@@ -9438,37 +9537,45 @@ msgstr "接收选中项目"
 msgid "Receive Item"
 msgstr "接收物品"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr "显示未完成的分配"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr "编辑分配"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr "删除分配"
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr "分配序列号"
@@ -9506,38 +9613,85 @@ msgstr "订单库存"
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr "创建配送"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr "项目"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr "查看发货"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr "编辑配送"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr "取消配送"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr "添加配送"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr "显示已发货的货物"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr "显示已送达的货物"
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr "撤销"
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr "条形码信息"
@@ -9659,6 +9813,14 @@ msgstr "错误报告已删除"
 msgid "Error Details"
 msgstr "错误详情"
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr "删除导入的会话"
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr "创建导入会话"
 
@@ -9733,18 +9895,17 @@ msgstr "创建导入会话"
 msgid "Uploaded"
 msgstr "已上传"
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr "型号类型"
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr "按目标型号筛选"
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr "按导入会话状态筛选"
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr "按启用状态筛选"
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr "显示可用的项目"
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr "包括子地点"
 
@@ -10315,39 +10476,47 @@ msgstr "只显示通过的测试"
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr "在结果中包含子地点"
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
-msgstr "显示结构性地点"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
+msgstr "在结果中包含子地点"
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr "显示结构性地点"
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr "显示外部地点"
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr "有位置类型"
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr "按位置类型筛选"
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr "添加库存地点"
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr "已添加"
diff --git a/src/frontend/src/locales/zh_Hant/messages.po b/src/frontend/src/locales/zh_Hant/messages.po
index 98a0e3811d..74cd7fade2 100644
--- a/src/frontend/src/locales/zh_Hant/messages.po
+++ b/src/frontend/src/locales/zh_Hant/messages.po
@@ -8,7 +8,7 @@ msgstr ""
 "Language: zh\n"
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-03-15 21:40\n"
+"PO-Revision-Date: 2025-03-18 00:39\n"
 "Last-Translator: \n"
 "Language-Team: Chinese Traditional\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
@@ -94,12 +94,13 @@ msgstr ""
 #: src/components/render/ModelType.tsx:273
 #: src/functions/auth.tsx:525
 #: src/pages/ErrorPage.tsx:11
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:128
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:639
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:123
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:634
 #: src/pages/part/PartPricingPanel.tsx:71
 #: src/states/IconState.tsx:46
 #: src/states/IconState.tsx:76
 #: src/tables/InvenTreeTable.tsx:508
+#: src/tables/InvenTreeTableHeader.tsx:116
 #: src/tables/bom/BomTable.tsx:455
 #: src/tables/stock/StockItemTestResultTable.tsx:321
 msgid "Error"
@@ -166,7 +167,7 @@ msgstr ""
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:205
 #: src/pages/sales/ReturnOrderDetail.tsx:169
 #: src/pages/sales/SalesOrderDetail.tsx:181
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:169
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:170
 msgid "Link"
 msgstr "鏈接"
 
@@ -175,7 +176,7 @@ msgid "This will remove the link to the associated barcode"
 msgstr "這將刪除關聯條碼的鏈接"
 
 #: src/components/barcodes/QRCode.tsx:204
-#: src/components/items/ActionDropdown.tsx:183
+#: src/components/items/ActionDropdown.tsx:190
 #: src/forms/PurchaseOrderForms.tsx:511
 msgid "Unlink Barcode"
 msgstr "解綁條碼"
@@ -196,29 +197,42 @@ msgstr "已複製"
 msgid "Copy"
 msgstr "複製"
 
-#: src/components/buttons/PrintingActions.tsx:77
-msgid "Printing"
+#: src/components/buttons/PrintingActions.tsx:51
+msgid "Printing Labels"
 msgstr ""
 
-#: src/components/buttons/PrintingActions.tsx:78
-msgid "Printing completed successfully"
+#: src/components/buttons/PrintingActions.tsx:56
+msgid "Printing Reports"
 msgstr ""
 
+#: src/components/buttons/PrintingActions.tsx:77
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#: src/components/buttons/PrintingActions.tsx:78
+#~ msgid "Printing completed successfully"
+#~ msgstr "Printing completed successfully"
+
 #: src/components/buttons/PrintingActions.tsx:114
 #~ msgid "Label printing completed successfully"
 #~ msgstr "Label printing completed successfully"
 
+#: src/components/buttons/PrintingActions.tsx:118
+msgid "Print Label"
+msgstr "打印標籤"
+
 #: src/components/buttons/PrintingActions.tsx:121
 #~ msgid "The label could not be generated"
 #~ msgstr "The label could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:146
-msgid "Printing Labels"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:124
+#: src/components/buttons/PrintingActions.tsx:149
+msgid "Print"
+msgstr "打印"
 
-#: src/components/buttons/PrintingActions.tsx:152
-msgid "Printing Reports"
-msgstr ""
+#: src/components/buttons/PrintingActions.tsx:133
+msgid "Print Report"
+msgstr "打印報告"
 
 #: src/components/buttons/PrintingActions.tsx:152
 #~ msgid "Generate"
@@ -232,28 +246,15 @@ msgstr ""
 #~ msgid "The report could not be generated"
 #~ msgstr "The report could not be generated"
 
-#: src/components/buttons/PrintingActions.tsx:215
-msgid "Print Label"
-msgstr "打印標籤"
-
-#: src/components/buttons/PrintingActions.tsx:221
-#: src/components/buttons/PrintingActions.tsx:246
-msgid "Print"
-msgstr "打印"
-
-#: src/components/buttons/PrintingActions.tsx:230
-msgid "Print Report"
-msgstr "打印報告"
-
-#: src/components/buttons/PrintingActions.tsx:267
+#: src/components/buttons/PrintingActions.tsx:170
 msgid "Printing Actions"
 msgstr "打印操作"
 
-#: src/components/buttons/PrintingActions.tsx:272
+#: src/components/buttons/PrintingActions.tsx:175
 msgid "Print Labels"
 msgstr "打印標籤"
 
-#: src/components/buttons/PrintingActions.tsx:278
+#: src/components/buttons/PrintingActions.tsx:181
 msgid "Print Reports"
 msgstr "列印報告"
 
@@ -307,6 +308,41 @@ msgstr "是"
 msgid "No"
 msgstr "否"
 
+#: src/components/calendar/Calendar.tsx:93
+#: src/components/calendar/Calendar.tsx:156
+msgid "Calendar Filters"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:108
+msgid "Previous month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:117
+msgid "Select month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:138
+msgid "Next month"
+msgstr ""
+
+#: src/components/calendar/Calendar.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:246
+msgid "Download data"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:133
+msgid "Order Updated"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:143
+msgid "Error updating order"
+msgstr ""
+
+#: src/components/calendar/OrderCalendar.tsx:179
+#: src/tables/Filter.tsx:140
+msgid "Overdue"
+msgstr "逾期"
+
 #: src/components/dashboard/DashboardLayout.tsx:285
 msgid "No Widgets Selected"
 msgstr ""
@@ -378,7 +414,7 @@ msgstr ""
 
 #: src/components/dashboard/DashboardWidgetLibrary.tsx:38
 #: src/pages/part/PartSchedulingDetail.tsx:306
-#: src/tables/part/PartTable.tsx:238
+#: src/tables/part/PartTable.tsx:241
 msgid "Low Stock"
 msgstr "低庫存"
 
@@ -545,7 +581,7 @@ msgstr ""
 
 #: src/components/dashboard/widgets/NewsWidget.tsx:60
 #: src/components/nav/NotificationDrawer.tsx:89
-#: src/pages/Notifications.tsx:74
+#: src/pages/Notifications.tsx:53
 msgid "Mark as read"
 msgstr "標記為已讀"
 
@@ -597,17 +633,17 @@ msgid "Remove the associated image from this item?"
 msgstr "刪除與此項關聯的圖片?"
 
 #: src/components/details/DetailsImage.tsx:82
-#: src/forms/StockForms.tsx:747
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:205
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
+#: src/forms/StockForms.tsx:749
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:200
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:403
 #: src/pages/stock/StockDetail.tsx:728
 msgid "Remove"
 msgstr "移除"
 
 #: src/components/details/DetailsImage.tsx:82
 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:179
-#: src/components/items/ActionDropdown.tsx:268
-#: src/components/items/ActionDropdown.tsx:269
+#: src/components/items/ActionDropdown.tsx:275
+#: src/components/items/ActionDropdown.tsx:276
 #: src/contexts/ThemeContext.tsx:40
 #: src/hooks/UseForm.tsx:40
 #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:105
@@ -643,9 +679,9 @@ msgid "Clear"
 msgstr "清除"
 
 #: src/components/details/DetailsImage.tsx:255
-#: src/components/forms/ApiForm.tsx:675
+#: src/components/forms/ApiForm.tsx:702
 #: src/contexts/ThemeContext.tsx:40
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:650
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:645
 msgid "Submit"
 msgstr "提交"
 
@@ -715,7 +751,7 @@ msgstr "圖片上傳失敗"
 
 #: src/components/editors/NotesEditor.tsx:84
 #: src/components/editors/NotesEditor.tsx:120
-#: src/components/forms/ApiForm.tsx:486
+#: src/components/forms/ApiForm.tsx:500
 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45
 #: src/tables/bom/BomTable.tsx:446
 msgid "Success"
@@ -895,8 +931,8 @@ msgstr "服務器錯誤"
 msgid "A server error occurred"
 msgstr "服務器出錯。"
 
-#: src/components/forms/ApiForm.tsx:156
-#: src/components/forms/ApiForm.tsx:594
+#: src/components/forms/ApiForm.tsx:163
+#: src/components/forms/ApiForm.tsx:621
 msgid "Form Error"
 msgstr "表單錯誤"
 
@@ -904,19 +940,20 @@ msgstr "表單錯誤"
 #~ msgid "Form Errors Exist"
 #~ msgstr "Form Errors Exist"
 
-#: src/components/forms/ApiForm.tsx:602
+#: src/components/forms/ApiForm.tsx:629
 msgid "Errors exist for one or more form fields"
 msgstr "一個或多個表單字段存在錯誤"
 
-#: src/components/forms/ApiForm.tsx:713
+#: src/components/forms/ApiForm.tsx:740
+#: src/hooks/UseForm.tsx:131
 #: src/tables/plugin/PluginListTable.tsx:194
 msgid "Update"
 msgstr "更新"
 
-#: src/components/forms/ApiForm.tsx:733
-#: src/components/items/ActionDropdown.tsx:248
-#: src/hooks/UseForm.tsx:127
-#: src/pages/Notifications.tsx:130
+#: src/components/forms/ApiForm.tsx:760
+#: src/components/items/ActionDropdown.tsx:255
+#: src/hooks/UseForm.tsx:162
+#: src/pages/Notifications.tsx:109
 #: src/tables/RowActions.tsx:75
 #: src/tables/plugin/PluginListTable.tsx:231
 msgid "Delete"
@@ -994,7 +1031,7 @@ msgstr "你的用户名"
 #: src/components/forms/AuthenticationForm.tsx:133
 #: src/components/forms/AuthenticationForm.tsx:292
 #: src/pages/Auth/ResetPassword.tsx:33
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:704
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:699
 msgid "Password"
 msgstr "密碼"
 
@@ -1069,7 +1106,7 @@ msgid "Repeat password"
 msgstr "再次輸入密碼"
 
 #: src/components/forms/AuthenticationForm.tsx:313
-#: src/pages/Auth/Login.tsx:108
+#: src/pages/Auth/Login.tsx:114
 #: src/pages/Auth/Register.tsx:12
 msgid "Register"
 msgstr "註冊"
@@ -1097,6 +1134,7 @@ msgstr "主機"
 #: src/tables/machine/MachineTypeTable.tsx:340
 #: src/tables/plugin/PluginErrorTable.tsx:33
 #: src/tables/purchasing/ManufacturerPartParameterTable.tsx:32
+#: src/tables/settings/ApiTokenTable.tsx:55
 #: src/tables/settings/GroupTable.tsx:149
 #: src/tables/settings/PendingTasksTable.tsx:32
 #: src/tables/stock/LocationTypesTable.tsx:69
@@ -1167,7 +1205,7 @@ msgstr "API 版本"
 
 #: src/components/forms/InstanceOptions.tsx:124
 #: src/components/nav/NavigationDrawer.tsx:205
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:204
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:215
 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:44
 msgid "Plugins"
 msgstr "插件"
@@ -1231,7 +1269,7 @@ msgstr "搜尋"
 
 #: src/components/forms/fields/RelatedModelField.tsx:321
 #: src/components/modals/AboutInvenTreeModal.tsx:78
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:332
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:327
 msgid "Loading"
 msgstr "正在加載"
 
@@ -1425,7 +1463,7 @@ msgid "Importing Records"
 msgstr "導入記錄"
 
 #: src/components/importer/ImporterImportProgress.tsx:39
-#: src/tables/settings/ImportSessionTable.tsx:79
+#: src/tables/settings/ImportSessionTable.tsx:80
 msgid "Imported Rows"
 msgstr "導入的行"
 
@@ -1433,65 +1471,65 @@ msgstr "導入的行"
 #~ msgid "Imported rows"
 #~ msgstr "Imported rows"
 
-#: src/components/items/ActionDropdown.tsx:126
+#: src/components/items/ActionDropdown.tsx:133
 msgid "Options"
 msgstr "選項"
 
-#: src/components/items/ActionDropdown.tsx:162
-#: src/tables/InvenTreeTableHeader.tsx:170
-#: src/tables/InvenTreeTableHeader.tsx:171
-msgid "Barcode Actions"
-msgstr "條碼操作"
-
 #: src/components/items/ActionDropdown.tsx:162
 #~ msgid "Link custom barcode"
 #~ msgstr "Link custom barcode"
 
-#: src/components/items/ActionDropdown.tsx:167
+#: src/components/items/ActionDropdown.tsx:169
+#: src/tables/InvenTreeTableHeader.tsx:179
+#: src/tables/InvenTreeTableHeader.tsx:180
+msgid "Barcode Actions"
+msgstr "條碼操作"
+
+#: src/components/items/ActionDropdown.tsx:174
 msgid "View Barcode"
 msgstr ""
 
-#: src/components/items/ActionDropdown.tsx:169
+#: src/components/items/ActionDropdown.tsx:176
 msgid "View barcode"
 msgstr "查看條碼"
 
-#: src/components/items/ActionDropdown.tsx:175
+#: src/components/items/ActionDropdown.tsx:182
 msgid "Link Barcode"
 msgstr "關聯二維碼"
 
-#: src/components/items/ActionDropdown.tsx:177
+#: src/components/items/ActionDropdown.tsx:184
 msgid "Link a custom barcode to this item"
 msgstr "將自定義條碼鏈接到此項目"
 
-#: src/components/items/ActionDropdown.tsx:185
+#: src/components/items/ActionDropdown.tsx:192
 msgid "Unlink custom barcode"
 msgstr "解綁自定義條碼鏈接"
 
-#: src/components/items/ActionDropdown.tsx:236
+#: src/components/items/ActionDropdown.tsx:243
 #: src/tables/RowActions.tsx:65
 msgid "Edit"
 msgstr "編輯"
 
-#: src/components/items/ActionDropdown.tsx:237
+#: src/components/items/ActionDropdown.tsx:244
 msgid "Edit item"
 msgstr "編輯項目"
 
-#: src/components/items/ActionDropdown.tsx:249
+#: src/components/items/ActionDropdown.tsx:256
 msgid "Delete item"
 msgstr "刪除項目"
 
-#: src/components/items/ActionDropdown.tsx:257
-#: src/components/items/ActionDropdown.tsx:258
+#: src/components/items/ActionDropdown.tsx:264
+#: src/components/items/ActionDropdown.tsx:265
 msgid "Hold"
 msgstr "掛起"
 
-#: src/components/items/ActionDropdown.tsx:280
+#: src/components/items/ActionDropdown.tsx:287
 #: src/pages/Index/Scan.tsx:62
 #: src/tables/RowActions.tsx:55
 msgid "Duplicate"
 msgstr "複製"
 
-#: src/components/items/ActionDropdown.tsx:281
+#: src/components/items/ActionDropdown.tsx:288
 msgid "Duplicate item"
 msgstr "重複項目"
 
@@ -1783,8 +1821,8 @@ msgstr "系統設置"
 #: src/components/nav/NavigationDrawer.tsx:160
 #: src/components/nav/SettingsHeader.tsx:42
 #: src/defaults/actions.tsx:80
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:219
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:224
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:230
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:235
 msgid "Admin Center"
 msgstr "管理中心"
 
@@ -1823,7 +1861,7 @@ msgstr "零件"
 #: src/components/nav/NavigationDrawer.tsx:84
 #: src/components/render/Part.tsx:30
 #: src/defaults/links.tsx:13
-#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:704
 #: src/pages/Index/Settings/SystemSettings.tsx:217
 #: src/pages/part/PartDetail.tsx:497
 #: src/pages/stock/LocationDetail.tsx:351
@@ -1835,7 +1873,7 @@ msgstr "庫存"
 #: src/components/nav/NavigationDrawer.tsx:91
 #: src/defaults/links.tsx:15
 #: src/pages/build/BuildDetail.tsx:551
-#: src/pages/build/BuildIndex.tsx:36
+#: src/pages/build/BuildIndex.tsx:90
 msgid "Manufacturing"
 msgstr ""
 
@@ -1846,7 +1884,7 @@ msgstr ""
 #: src/pages/company/SupplierDetail.tsx:9
 #: src/pages/company/SupplierPartDetail.tsx:353
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:510
-#: src/pages/purchasing/PurchasingIndex.tsx:77
+#: src/pages/purchasing/PurchasingIndex.tsx:122
 msgid "Purchasing"
 msgstr "採購中"
 
@@ -1854,9 +1892,9 @@ msgstr "採購中"
 #: src/defaults/links.tsx:24
 #: src/pages/company/CustomerDetail.tsx:9
 #: src/pages/sales/ReturnOrderDetail.tsx:497
-#: src/pages/sales/SalesIndex.tsx:55
+#: src/pages/sales/SalesIndex.tsx:139
 #: src/pages/sales/SalesOrderDetail.tsx:561
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:362
 msgid "Sales"
 msgstr "銷售"
 
@@ -1883,8 +1921,8 @@ msgstr "羣組"
 #: src/components/nav/NotificationDrawer.tsx:179
 #: src/pages/Index/Settings/SystemSettings.tsx:112
 #: src/pages/Index/Settings/UserSettings.tsx:97
-#: src/pages/Notifications.tsx:66
-#: src/pages/Notifications.tsx:158
+#: src/pages/Notifications.tsx:45
+#: src/pages/Notifications.tsx:130
 msgid "Notifications"
 msgstr "通知"
 
@@ -1900,12 +1938,12 @@ msgstr "導航欄"
 
 #: src/components/nav/NavigationDrawer.tsx:198
 #: src/forms/PurchaseOrderForms.tsx:755
-#: src/forms/StockForms.tsx:704
-#: src/forms/StockForms.tsx:748
-#: src/forms/StockForms.tsx:787
-#: src/forms/StockForms.tsx:823
-#: src/forms/StockForms.tsx:902
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:454
+#: src/forms/StockForms.tsx:706
+#: src/forms/StockForms.tsx:750
+#: src/forms/StockForms.tsx:789
+#: src/forms/StockForms.tsx:825
+#: src/forms/StockForms.tsx:904
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:449
 #: src/tables/RowActions.tsx:155
 #: src/tables/build/BuildLineTable.tsx:100
 msgid "Actions"
@@ -1916,7 +1954,7 @@ msgid "About"
 msgstr "關於"
 
 #: src/components/nav/NotificationDrawer.tsx:181
-#: src/pages/Notifications.tsx:95
+#: src/pages/Notifications.tsx:74
 msgid "Mark all as read"
 msgstr "全部標記為已讀"
 
@@ -1952,18 +1990,18 @@ msgstr ""
 #: src/pages/company/ManufacturerPartDetail.tsx:177
 #: src/pages/part/PartDetail.tsx:560
 #: src/pages/part/PartSupplierDetail.tsx:15
-#: src/pages/purchasing/PurchasingIndex.tsx:36
+#: src/pages/purchasing/PurchasingIndex.tsx:81
 msgid "Suppliers"
 msgstr "供應商"
 
 #: src/components/nav/SearchDrawer.tsx:285
 #: src/pages/part/PartSupplierDetail.tsx:23
-#: src/pages/purchasing/PurchasingIndex.tsx:53
+#: src/pages/purchasing/PurchasingIndex.tsx:98
 msgid "Manufacturers"
 msgstr "製造商"
 
 #: src/components/nav/SearchDrawer.tsx:295
-#: src/pages/sales/SalesIndex.tsx:40
+#: src/pages/sales/SalesIndex.tsx:124
 msgid "Customers"
 msgstr "客户"
 
@@ -2058,8 +2096,8 @@ msgstr ""
 #: src/tables/machine/MachineTypeTable.tsx:240
 #: src/tables/machine/MachineTypeTable.tsx:344
 #: src/tables/plugin/PluginListTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:106
-#: src/tables/sales/SalesOrderAllocationTable.tsx:125
+#: src/tables/sales/SalesOrderAllocationTable.tsx:110
+#: src/tables/sales/SalesOrderAllocationTable.tsx:129
 #: src/tables/sales/SalesOrderLineItemTable.tsx:91
 #: src/tables/stock/LocationTypesTable.tsx:74
 msgid "Description"
@@ -2092,12 +2130,13 @@ msgstr "日期"
 #: src/tables/machine/MachineListTable.tsx:336
 #: src/tables/machine/MachineListTable.tsx:606
 #: src/tables/part/ParametricPartTable.tsx:224
-#: src/tables/part/PartTable.tsx:178
+#: src/tables/part/PartTable.tsx:181
 #: src/tables/part/PartVariantTable.tsx:15
 #: src/tables/plugin/PluginListTable.tsx:95
 #: src/tables/plugin/PluginListTable.tsx:400
 #: src/tables/purchasing/SupplierPartTable.tsx:101
 #: src/tables/purchasing/SupplierPartTable.tsx:193
+#: src/tables/settings/ApiTokenTable.tsx:60
 #: src/tables/settings/UserTable.tsx:283
 #: src/tables/stock/StockItemTable.tsx:306
 msgid "Active"
@@ -2198,24 +2237,24 @@ msgstr "未知模型: {model}"
 #: src/forms/PurchaseOrderForms.tsx:751
 #: src/forms/ReturnOrderForms.tsx:238
 #: src/forms/SalesOrderForms.tsx:266
-#: src/forms/StockForms.tsx:280
-#: src/forms/StockForms.tsx:699
-#: src/forms/StockForms.tsx:743
-#: src/forms/StockForms.tsx:782
-#: src/forms/StockForms.tsx:818
-#: src/forms/StockForms.tsx:856
-#: src/forms/StockForms.tsx:898
-#: src/forms/StockForms.tsx:946
-#: src/forms/StockForms.tsx:990
+#: src/forms/StockForms.tsx:282
+#: src/forms/StockForms.tsx:701
+#: src/forms/StockForms.tsx:745
+#: src/forms/StockForms.tsx:784
+#: src/forms/StockForms.tsx:820
+#: src/forms/StockForms.tsx:858
+#: src/forms/StockForms.tsx:900
+#: src/forms/StockForms.tsx:948
+#: src/forms/StockForms.tsx:992
 #: src/pages/build/BuildDetail.tsx:93
 #: src/pages/part/PartDetail.tsx:990
 #: src/tables/build/BuildAllocatedStockTable.tsx:95
 #: src/tables/build/BuildLineTable.tsx:71
-#: src/tables/part/PartTable.tsx:32
+#: src/tables/part/PartTable.tsx:35
 #: src/tables/part/RelatedPartTable.tsx:49
 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:129
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:118
+#: src/tables/sales/SalesOrderAllocationTable.tsx:122
 #: src/tables/stock/StockTrackingTable.tsx:85
 msgid "Part"
 msgstr "零件"
@@ -2249,7 +2288,7 @@ msgid "Supplier Part"
 msgstr "供應商零件"
 
 #: src/components/render/ModelType.tsx:53
-#: src/pages/purchasing/PurchasingIndex.tsx:47
+#: src/pages/purchasing/PurchasingIndex.tsx:92
 msgid "Supplier Parts"
 msgstr "供應商零件"
 
@@ -2260,7 +2299,7 @@ msgid "Manufacturer Part"
 msgstr "製造商零件"
 
 #: src/components/render/ModelType.tsx:62
-#: src/pages/purchasing/PurchasingIndex.tsx:64
+#: src/pages/purchasing/PurchasingIndex.tsx:109
 msgid "Manufacturer Parts"
 msgstr "製造商零件"
 
@@ -2289,9 +2328,9 @@ msgstr "庫存項"
 #: src/components/render/ModelType.tsx:80
 #: src/pages/company/CompanyDetail.tsx:205
 #: src/pages/part/CategoryDetail.tsx:279
-#: src/pages/part/PartStocktakeDetail.tsx:115
+#: src/pages/part/PartStocktakeDetail.tsx:116
 #: src/pages/stock/LocationDetail.tsx:124
-#: src/pages/stock/LocationDetail.tsx:177
+#: src/pages/stock/LocationDetail.tsx:183
 #: src/pages/stock/LocationDetail.tsx:380
 msgid "Stock Items"
 msgstr "庫存項"
@@ -2301,7 +2340,7 @@ msgid "Stock Location"
 msgstr "庫存地點"
 
 #: src/components/render/ModelType.tsx:89
-#: src/pages/stock/LocationDetail.tsx:191
+#: src/pages/stock/LocationDetail.tsx:177
 #: src/pages/stock/LocationDetail.tsx:372
 #: src/pages/stock/StockDetail.tsx:902
 msgid "Stock Locations"
@@ -2359,7 +2398,7 @@ msgid "Companies"
 msgstr "公司"
 
 #: src/components/render/ModelType.tsx:140
-#: src/pages/build/BuildDetail.tsx:219
+#: src/pages/build/BuildDetail.tsx:187
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:222
 #: src/pages/sales/ReturnOrderDetail.tsx:186
 #: src/pages/sales/SalesOrderDetail.tsx:198
@@ -2370,7 +2409,7 @@ msgid "Project Code"
 msgstr "項目編碼"
 
 #: src/components/render/ModelType.tsx:141
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:145
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
 msgid "Project Codes"
 msgstr "項目編碼"
 
@@ -2390,7 +2429,7 @@ msgstr "採購訂單"
 #: src/pages/company/CompanyDetail.tsx:198
 #: src/pages/company/SupplierPartDetail.tsx:266
 #: src/pages/part/PartDetail.tsx:573
-#: src/pages/purchasing/PurchasingIndex.tsx:29
+#: src/pages/purchasing/PurchasingIndex.tsx:60
 msgid "Purchase Orders"
 msgstr "採購訂單"
 
@@ -2406,11 +2445,11 @@ msgstr "採購訂單行"
 #: src/pages/build/BuildDetail.tsx:160
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:24
 #: src/pages/sales/SalesOrderDetail.tsx:556
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:95
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:358
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:96
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:360
 #: src/pages/stock/StockDetail.tsx:285
 #: src/tables/part/PartSalesAllocationsTable.tsx:38
-#: src/tables/sales/SalesOrderAllocationTable.tsx:99
+#: src/tables/sales/SalesOrderAllocationTable.tsx:103
 #: src/tables/stock/StockTrackingTable.tsx:129
 msgid "Sales Order"
 msgstr "銷售訂單"
@@ -2419,12 +2458,12 @@ msgstr "銷售訂單"
 #: src/pages/Index/Settings/SystemSettings.tsx:277
 #: src/pages/company/CompanyDetail.tsx:218
 #: src/pages/part/PartDetail.tsx:585
-#: src/pages/sales/SalesIndex.tsx:26
+#: src/pages/sales/SalesIndex.tsx:82
 msgid "Sales Orders"
 msgstr "銷售訂單"
 
 #: src/components/render/ModelType.tsx:171
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:357
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:359
 msgid "Sales Order Shipment"
 msgstr "銷售訂單配送"
 
@@ -2442,7 +2481,7 @@ msgstr "退貨訂單"
 #: src/pages/Index/Settings/SystemSettings.tsx:293
 #: src/pages/company/CompanyDetail.tsx:225
 #: src/pages/part/PartDetail.tsx:592
-#: src/pages/sales/SalesIndex.tsx:33
+#: src/pages/sales/SalesIndex.tsx:103
 msgid "Return Orders"
 msgstr "退貨訂單"
 
@@ -2491,7 +2530,11 @@ msgstr "所有者"
 #: src/pages/Auth/ChangePassword.tsx:35
 #: src/pages/core/UserDetail.tsx:171
 #: src/tables/Filter.tsx:314
+#: src/tables/settings/ApiTokenTable.tsx:100
+#: src/tables/settings/ApiTokenTable.tsx:118
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:78
+#: src/tables/settings/ExportSessionTable.tsx:40
+#: src/tables/settings/ImportSessionTable.tsx:74
 #: src/tables/settings/StocktakeReportTable.tsx:45
 #: src/tables/stock/StockItemTestResultTable.tsx:208
 #: src/tables/stock/StockTrackingTable.tsx:188
@@ -2521,8 +2564,7 @@ msgid "Label Template"
 msgstr "標籤模板"
 
 #: src/components/render/ModelType.tsx:238
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:186
-#: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:32
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:197
 msgid "Label Templates"
 msgstr "標籤模板"
 
@@ -2531,8 +2573,7 @@ msgid "Report Template"
 msgstr "報告模板"
 
 #: src/components/render/ModelType.tsx:246
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:192
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:47
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:203
 msgid "Report Templates"
 msgstr "報告模板"
 
@@ -2576,7 +2617,7 @@ msgstr "錯誤"
 #~ msgstr "Unknown Models"
 
 #: src/components/render/Order.tsx:121
-#: src/tables/sales/SalesOrderAllocationTable.tsx:168
+#: src/tables/sales/SalesOrderAllocationTable.tsx:172
 msgid "Shipment"
 msgstr "配送"
 
@@ -2591,7 +2632,7 @@ msgstr "未激活"
 
 #: src/components/render/Part.tsx:28
 #: src/tables/bom/BomTable.tsx:206
-#: src/tables/part/PartTable.tsx:134
+#: src/tables/part/PartTable.tsx:137
 msgid "No stock"
 msgstr "無庫存"
 
@@ -2600,7 +2641,7 @@ msgstr "無庫存"
 #: src/pages/stock/StockDetail.tsx:838
 #: src/tables/build/BuildAllocatedStockTable.tsx:123
 #: src/tables/build/BuildOutputTable.tsx:81
-#: src/tables/sales/SalesOrderAllocationTable.tsx:137
+#: src/tables/sales/SalesOrderAllocationTable.tsx:141
 #: src/tables/stock/StockItemTable.tsx:383
 msgid "Serial Number"
 msgstr "序列號"
@@ -2611,10 +2652,10 @@ msgstr "序列號"
 #: src/forms/PurchaseOrderForms.tsx:754
 #: src/forms/ReturnOrderForms.tsx:239
 #: src/forms/SalesOrderForms.tsx:269
-#: src/pages/part/PartSchedulingDetail.tsx:82
-#: src/pages/part/PartStocktakeDetail.tsx:60
-#: src/pages/part/PartStocktakeDetail.tsx:238
-#: src/pages/part/PartStocktakeDetail.tsx:262
+#: src/pages/part/PartSchedulingDetail.tsx:83
+#: src/pages/part/PartStocktakeDetail.tsx:61
+#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:263
 #: src/pages/part/pricing/BomPricingPanel.tsx:148
 #: src/pages/part/pricing/PriceBreakPanel.tsx:89
 #: src/pages/part/pricing/PriceBreakPanel.tsx:172
@@ -2635,14 +2676,14 @@ msgstr "數量"
 #: src/forms/BuildForms.tsx:282
 #: src/forms/BuildForms.tsx:356
 #: src/forms/BuildForms.tsx:410
-#: src/forms/StockForms.tsx:701
-#: src/forms/StockForms.tsx:745
-#: src/forms/StockForms.tsx:784
-#: src/forms/StockForms.tsx:820
-#: src/forms/StockForms.tsx:858
-#: src/forms/StockForms.tsx:900
-#: src/forms/StockForms.tsx:948
-#: src/forms/StockForms.tsx:992
+#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:747
+#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:860
+#: src/forms/StockForms.tsx:902
+#: src/forms/StockForms.tsx:950
+#: src/forms/StockForms.tsx:994
 #: src/tables/build/BuildLineTable.tsx:88
 msgid "Batch"
 msgstr "批次"
@@ -3132,7 +3173,7 @@ msgstr ""
 
 #: src/components/wizards/OrderPartsWizard.tsx:383
 #: src/tables/build/BuildLineTable.tsx:648
-#: src/tables/part/PartTable.tsx:354
+#: src/tables/part/PartTable.tsx:377
 #: src/tables/sales/SalesOrderLineItemTable.tsx:326
 msgid "Order Parts"
 msgstr ""
@@ -3610,7 +3651,7 @@ msgstr "生產產出"
 #: src/forms/PurchaseOrderForms.tsx:674
 #: src/forms/ReturnOrderForms.tsx:193
 #: src/forms/ReturnOrderForms.tsx:240
-#: src/forms/StockForms.tsx:623
+#: src/forms/StockForms.tsx:625
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:81
 #: src/pages/build/BuildDetail.tsx:107
 #: src/pages/core/UserDetail.tsx:109
@@ -3624,7 +3665,7 @@ msgstr "生產產出"
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:128
 #: src/tables/sales/ReturnOrderLineItemTable.tsx:165
 #: src/tables/settings/CustomStateTable.tsx:79
-#: src/tables/settings/ImportSessionTable.tsx:113
+#: src/tables/settings/ImportSessionTable.tsx:114
 #: src/tables/stock/StockItemTable.tsx:311
 #: src/tables/stock/StockTrackingTable.tsx:63
 msgid "Status"
@@ -3672,7 +3713,7 @@ msgstr "已分配"
 
 #: src/forms/BuildForms.tsx:579
 #: src/forms/SalesOrderForms.tsx:256
-#: src/pages/build/BuildDetail.tsx:232
+#: src/pages/build/BuildDetail.tsx:197
 msgid "Source Location"
 msgstr "來源地點"
 
@@ -3704,8 +3745,8 @@ msgstr "分配的庫存項目"
 #: src/forms/PartForms.tsx:157
 #: src/pages/part/CategoryDetail.tsx:122
 #: src/pages/part/PartDetail.tsx:384
-#: src/tables/part/PartCategoryTable.tsx:90
-#: src/tables/part/PartTable.tsx:300
+#: src/tables/part/PartCategoryTable.tsx:93
+#: src/tables/part/PartTable.tsx:303
 msgid "Subscribed"
 msgstr "已訂閲"
 
@@ -3779,12 +3820,12 @@ msgid "Set Expiry Date"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:489
-#: src/forms/StockForms.tsx:604
+#: src/forms/StockForms.tsx:606
 msgid "Adjust Packaging"
 msgstr "調整封包"
 
 #: src/forms/PurchaseOrderForms.tsx:497
-#: src/forms/StockForms.tsx:595
+#: src/forms/StockForms.tsx:597
 msgid "Change Status"
 msgstr "更改狀態"
 
@@ -3793,14 +3834,14 @@ msgid "Add Note"
 msgstr "添加備註"
 
 #: src/forms/PurchaseOrderForms.tsx:552
-#: src/forms/StockForms.tsx:700
-#: src/forms/StockForms.tsx:744
-#: src/forms/StockForms.tsx:783
-#: src/forms/StockForms.tsx:819
-#: src/forms/StockForms.tsx:857
-#: src/forms/StockForms.tsx:899
-#: src/forms/StockForms.tsx:947
-#: src/forms/StockForms.tsx:991
+#: src/forms/StockForms.tsx:702
+#: src/forms/StockForms.tsx:746
+#: src/forms/StockForms.tsx:785
+#: src/forms/StockForms.tsx:821
+#: src/forms/StockForms.tsx:859
+#: src/forms/StockForms.tsx:901
+#: src/forms/StockForms.tsx:949
+#: src/forms/StockForms.tsx:993
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:82
 #: src/pages/core/UserDetail.tsx:115
 #: src/pages/stock/StockDetail.tsx:222
@@ -3826,13 +3867,13 @@ msgid "Store with already received stock"
 msgstr "存儲已收到的庫存"
 
 #: src/forms/PurchaseOrderForms.tsx:618
-#: src/pages/build/BuildDetail.tsx:246
+#: src/pages/build/BuildDetail.tsx:211
 #: src/pages/stock/StockDetail.tsx:204
 #: src/pages/stock/StockDetail.tsx:860
 #: src/tables/build/BuildAllocatedStockTable.tsx:130
 #: src/tables/build/BuildOrderTestTable.tsx:196
 #: src/tables/build/BuildOutputTable.tsx:86
-#: src/tables/sales/SalesOrderAllocationTable.tsx:144
+#: src/tables/sales/SalesOrderAllocationTable.tsx:148
 #: src/tables/stock/StockItemTable.tsx:377
 msgid "Batch Code"
 msgstr "批號"
@@ -3842,7 +3883,7 @@ msgid "Enter batch code for received items"
 msgstr ""
 
 #: src/forms/PurchaseOrderForms.tsx:632
-#: src/forms/StockForms.tsx:164
+#: src/forms/StockForms.tsx:166
 msgid "Serial Numbers"
 msgstr "序列號"
 
@@ -3865,7 +3906,7 @@ msgstr ""
 #~ msgstr "Receive line items"
 
 #: src/forms/PurchaseOrderForms.tsx:660
-#: src/forms/StockForms.tsx:639
+#: src/forms/StockForms.tsx:641
 #: src/pages/company/SupplierPartDetail.tsx:172
 #: src/pages/company/SupplierPartDetail.tsx:236
 #: src/pages/stock/StockDetail.tsx:343
@@ -3922,60 +3963,60 @@ msgstr "下一個序列號"
 #~ msgid "Create Stock Item"
 #~ msgstr "Create Stock Item"
 
-#: src/forms/StockForms.tsx:143
+#: src/forms/StockForms.tsx:145
 msgid "Add given quantity as packs instead of individual items"
 msgstr "將給定的數量添加為包,而不是單個項目"
 
-#: src/forms/StockForms.tsx:157
-msgid "Enter initial quantity for this stock item"
-msgstr "輸入此庫存項的初始數量"
-
 #: src/forms/StockForms.tsx:158
 #~ msgid "Stock item updated"
 #~ msgstr "Stock item updated"
 
-#: src/forms/StockForms.tsx:166
+#: src/forms/StockForms.tsx:159
+msgid "Enter initial quantity for this stock item"
+msgstr "輸入此庫存項的初始數量"
+
+#: src/forms/StockForms.tsx:168
 msgid "Enter serial numbers for new stock (or leave blank)"
 msgstr "輸入新庫存的序列號(或留空)"
 
-#: src/forms/StockForms.tsx:181
+#: src/forms/StockForms.tsx:183
 msgid "Stock Status"
 msgstr "庫存狀態"
 
-#: src/forms/StockForms.tsx:237
+#: src/forms/StockForms.tsx:239
 #: src/pages/stock/StockDetail.tsx:575
 #: src/tables/stock/StockItemTable.tsx:533
 #: src/tables/stock/StockItemTable.tsx:666
 msgid "Add Stock Item"
 msgstr "編輯庫存項"
 
-#: src/forms/StockForms.tsx:281
+#: src/forms/StockForms.tsx:283
 msgid "Select the part to install"
 msgstr "選擇要安裝的零件"
 
-#: src/forms/StockForms.tsx:402
+#: src/forms/StockForms.tsx:404
 msgid "Confirm Stock Transfer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:525
+#: src/forms/StockForms.tsx:527
 msgid "Loading..."
 msgstr "正在加載..."
 
-#: src/forms/StockForms.tsx:583
+#: src/forms/StockForms.tsx:585
 msgid "Move to default location"
 msgstr "移動到默認位置"
 
-#: src/forms/StockForms.tsx:703
+#: src/forms/StockForms.tsx:705
 msgid "Move"
 msgstr "移動"
 
-#: src/forms/StockForms.tsx:746
-#: src/forms/StockForms.tsx:785
-#: src/forms/StockForms.tsx:821
-#: src/forms/StockForms.tsx:859
-#: src/forms/StockForms.tsx:901
-#: src/forms/StockForms.tsx:949
-#: src/forms/StockForms.tsx:993
+#: src/forms/StockForms.tsx:748
+#: src/forms/StockForms.tsx:787
+#: src/forms/StockForms.tsx:823
+#: src/forms/StockForms.tsx:861
+#: src/forms/StockForms.tsx:903
+#: src/forms/StockForms.tsx:951
+#: src/forms/StockForms.tsx:995
 #: src/pages/company/SupplierPartDetail.tsx:190
 #: src/pages/company/SupplierPartDetail.tsx:371
 #: src/pages/part/PartDetail.tsx:251
@@ -3985,50 +4026,50 @@ msgstr "移動"
 msgid "In Stock"
 msgstr "入庫"
 
-#: src/forms/StockForms.tsx:786
+#: src/forms/StockForms.tsx:788
 #: src/pages/stock/StockDetail.tsx:719
 #: src/tables/stock/StockItemTestResultTable.tsx:350
 msgid "Add"
 msgstr "添加"
 
-#: src/forms/StockForms.tsx:822
+#: src/forms/StockForms.tsx:824
 #: src/pages/Index/Scan.tsx:180
 #: src/pages/stock/StockDetail.tsx:708
 msgid "Count"
 msgstr "總計"
 
-#: src/forms/StockForms.tsx:1100
+#: src/forms/StockForms.tsx:1102
 #: src/pages/stock/StockDetail.tsx:720
 #: src/tables/stock/StockItemTable.tsx:584
 msgid "Add Stock"
 msgstr "添加庫存"
 
-#: src/forms/StockForms.tsx:1101
+#: src/forms/StockForms.tsx:1103
 msgid "Stock added"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1110
+#: src/forms/StockForms.tsx:1112
 #: src/pages/stock/StockDetail.tsx:729
 #: src/tables/stock/StockItemTable.tsx:593
 msgid "Remove Stock"
 msgstr "移除庫存"
 
-#: src/forms/StockForms.tsx:1111
+#: src/forms/StockForms.tsx:1113
 msgid "Stock removed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1120
+#: src/forms/StockForms.tsx:1122
 #: src/pages/part/PartDetail.tsx:916
 #: src/pages/stock/StockDetail.tsx:742
 #: src/tables/stock/StockItemTable.tsx:602
 msgid "Transfer Stock"
 msgstr "轉移庫存"
 
-#: src/forms/StockForms.tsx:1121
+#: src/forms/StockForms.tsx:1123
 msgid "Stock transferred"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1130
+#: src/forms/StockForms.tsx:1132
 #: src/pages/part/PartDetail.tsx:905
 #: src/pages/stock/LocationDetail.tsx:313
 #: src/pages/stock/LocationDetail.tsx:317
@@ -4037,44 +4078,44 @@ msgstr ""
 msgid "Count Stock"
 msgstr "庫存數量"
 
-#: src/forms/StockForms.tsx:1131
+#: src/forms/StockForms.tsx:1133
 msgid "Stock counted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1140
+#: src/forms/StockForms.tsx:1142
 msgid "Change Stock Status"
 msgstr "更改庫存狀態"
 
-#: src/forms/StockForms.tsx:1141
+#: src/forms/StockForms.tsx:1143
 msgid "Stock status changed"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1150
+#: src/forms/StockForms.tsx:1152
 msgid "Merge Stock"
 msgstr "合併庫存"
 
-#: src/forms/StockForms.tsx:1151
+#: src/forms/StockForms.tsx:1153
 msgid "Stock merged"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1166
+#: src/forms/StockForms.tsx:1168
 msgid "Assign Stock to Customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1167
+#: src/forms/StockForms.tsx:1169
 msgid "Stock assigned to customer"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1177
+#: src/forms/StockForms.tsx:1179
 #: src/tables/stock/StockItemTable.tsx:655
 msgid "Delete Stock Items"
 msgstr "刪除庫存項"
 
-#: src/forms/StockForms.tsx:1178
+#: src/forms/StockForms.tsx:1180
 msgid "Stock deleted"
 msgstr ""
 
-#: src/forms/StockForms.tsx:1185
+#: src/forms/StockForms.tsx:1187
 msgid "Parent stock location"
 msgstr "上級庫存地點"
 
@@ -4087,7 +4128,7 @@ msgid "List of entries to choose from"
 msgstr ""
 
 #: src/forms/selectionListFields.tsx:104
-#: src/pages/part/PartStocktakeDetail.tsx:63
+#: src/pages/part/PartStocktakeDetail.tsx:64
 #: src/tables/FilterSelectDrawer.tsx:112
 #: src/tables/FilterSelectDrawer.tsx:135
 #: src/tables/FilterSelectDrawer.tsx:147
@@ -4281,6 +4322,27 @@ msgstr "超時"
 msgid "The request timed out"
 msgstr "請求已超時"
 
+#: src/hooks/UseDataExport.tsx:34
+msgid "Exporting Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:112
+msgid "Export Data"
+msgstr ""
+
+#: src/hooks/UseDataExport.tsx:115
+msgid "Export"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:57
+msgid "Process completed successfully"
+msgstr ""
+
+#: src/hooks/UseDataOutput.tsx:73
+#: src/hooks/UseDataOutput.tsx:103
+msgid "Process failed"
+msgstr ""
+
 #: src/hooks/UseForm.tsx:90
 msgid "Item Created"
 msgstr "項目已創建"
@@ -4289,11 +4351,19 @@ msgstr "項目已創建"
 msgid "Item Updated"
 msgstr "項目已更新"
 
-#: src/hooks/UseForm.tsx:132
+#: src/hooks/UseForm.tsx:135
+msgid "Items Updated"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:137
+msgid "Update multiple items"
+msgstr ""
+
+#: src/hooks/UseForm.tsx:167
 msgid "Item Deleted"
 msgstr "項目已刪除"
 
-#: src/hooks/UseForm.tsx:136
+#: src/hooks/UseForm.tsx:171
 msgid "Are you sure you want to delete this item?"
 msgstr "確實要刪除此項目嗎?"
 
@@ -4342,7 +4412,7 @@ msgstr ""
 msgid "Checking if you are already logged in"
 msgstr "檢查您是否已經登錄"
 
-#: src/pages/Auth/Login.tsx:31
+#: src/pages/Auth/Login.tsx:32
 msgid "No selection"
 msgstr "未選擇"
 
@@ -4354,12 +4424,12 @@ msgstr "未選擇"
 #~ msgid "Register below"
 #~ msgstr "Register below"
 
-#: src/pages/Auth/Login.tsx:96
+#: src/pages/Auth/Login.tsx:98
 #: src/pages/Index/Settings/SystemSettings.tsx:68
 msgid "Login"
 msgstr "登錄"
 
-#: src/pages/Auth/Login.tsx:100
+#: src/pages/Auth/Login.tsx:106
 msgid "Don't have an account?"
 msgstr "沒有帳户?"
 
@@ -4372,12 +4442,12 @@ msgid "Multi-Factor Login"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:19
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:689
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:684
 msgid "TOTP Code"
 msgstr ""
 
 #: src/pages/Auth/MFA.tsx:21
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:691
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:686
 msgid "Enter your TOTP or recovery code"
 msgstr ""
 
@@ -4870,7 +4940,7 @@ msgid "Position"
 msgstr ""
 
 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:88
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:445
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:440
 msgid "Type"
 msgstr ""
 
@@ -4927,31 +4997,31 @@ msgstr ""
 msgid "Enter the TOTP code to ensure it registered correctly"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:52
+msgid "Email Addresses"
+msgstr ""
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55
 #~ msgid "Single Sign On Accounts"
 #~ msgstr "Single Sign On Accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:57
-msgid "Email Addresses"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:65
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
 msgid "Single Sign On"
 msgstr ""
 
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68
+msgid "Not enabled"
+msgstr "未啓用"
+
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69
 #~ msgid "Multifactor"
 #~ msgstr "Multifactor"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:73
-msgid "Not enabled"
-msgstr "未啓用"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:71
 msgid "Single Sign On is not enabled for this server"
 msgstr "此服務器未啓用單點登錄"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
 msgid "Multi-Factor Authentication"
 msgstr ""
 
@@ -4959,65 +5029,65 @@ msgstr ""
 #~ msgid "Multifactor authentication is not configured for your account"
 #~ msgstr "Multifactor authentication is not configured for your account"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:91
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86
 msgid "Access Tokens"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:129
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:124
 msgid "Error while updating email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:142
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:298
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:434
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:137
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:429
 msgid "Not Configured"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:145
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:140
 msgid "Currently no email addresses are registered."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:152
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147
 msgid "The following email addresses are associated with your account:"
 msgstr "以下電子郵件地址與您的賬户相關聯:"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:160
 msgid "Primary"
 msgstr "主要的"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:165
 msgid "Verified"
 msgstr "已驗證"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:174
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
 msgid "Unverified"
 msgstr "未驗證"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
 msgid "Make Primary"
 msgstr "設為首選"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:193
 msgid "Re-send Verification"
 msgstr "重新發送驗證"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:212
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207
 msgid "Add Email Address"
 msgstr "添加電子郵件地址"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:214
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:209
 msgid "E-Mail"
 msgstr "郵箱"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:210
 msgid "E-Mail address"
 msgstr "郵箱地址"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:227
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:222
 msgid "Error while adding email"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:238
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233
 msgid "Add Email"
 msgstr "添加電子郵件"
 
@@ -5037,76 +5107,76 @@ msgstr "添加電子郵件"
 #~ msgid "You can sign in to your account using any of the following third party accounts"
 #~ msgstr "You can sign in to your account using any of the following third party accounts"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:296
 msgid "There are no providers connected to this account."
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:309
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:304
 msgid "You can sign in to your account using any of the following providers"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:322
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:317
 msgid "Remove Provider Link"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:413
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:408
 msgid "View"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:438
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:433
 msgid "No multi-factor tokens configured for this account"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:448
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:443
 msgid "Last used at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:451
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:446
 msgid "Created at"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:472
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:575
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:467
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:570
 msgid "Recovery Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:471
 msgid "Unused Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:481
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:476
 msgid "Used Codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:534
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:529
 msgid "Error while registering recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:568
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:563
 msgid "TOTP"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:569
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:564
 msgid "Time-based One-Time Password"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:576
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:571
 msgid "One-Time pre-generated recovery codes"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:590
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:585
 msgid "Add Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:605
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:600
 msgid "Register TOTP Token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:630
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:625
 msgid "Error registering TOTP token"
 msgstr ""
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:706
+#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:701
 msgid "Enter your password"
 msgstr ""
 
@@ -5114,30 +5184,10 @@ msgstr ""
 #~ msgid "Token is used - no actions"
 #~ msgstr "Token is used - no actions"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:745
-msgid "Revoke"
-msgstr "撤銷"
-
 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:761
 #~ msgid "No tokens configured"
 #~ msgstr "No tokens configured"
 
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:765
-msgid "Error revoking token"
-msgstr ""
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:773
-#~ msgid "Expiry"
-#~ msgstr "Expiry"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:776
-#~ msgid "Last Seen"
-#~ msgstr "Last Seen"
-
-#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:779
-#~ msgid "Token"
-#~ msgstr "Token"
-
 #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61
 msgid "Display Settings"
 msgstr "顯示設置"
@@ -5251,65 +5301,69 @@ msgstr "上次獲取時間"
 msgid "Base currency"
 msgstr "基準貨幣"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:109
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:114
 msgid "User Management"
 msgstr ""
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:115
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:120
 msgid "Data Import"
 msgstr "數據導入"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:121
-msgid "Barcode Scans"
-msgstr "掃描條碼"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:127
-msgid "Background Tasks"
-msgstr "後台任務"
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:126
+msgid "Data Export"
+msgstr ""
 
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:127
 #~ msgid "Templates"
 #~ msgstr "Templates"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:133
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:132
+msgid "Barcode Scans"
+msgstr "掃描條碼"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:138
+msgid "Background Tasks"
+msgstr "後台任務"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:144
 msgid "Error Reports"
 msgstr "錯誤報告"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:139
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:150
 msgid "Currencies"
 msgstr "幣種"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:156
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:167
 msgid "Custom States"
 msgstr "自定狀態"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:162
-#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
-msgid "Custom Units"
-msgstr "自定義單位"
-
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:168
-#: src/pages/part/CategoryDetail.tsx:294
-msgid "Part Parameters"
-msgstr "零件參數"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:170
 #~ msgid "Location types"
 #~ msgstr "Location types"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:174
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:173
+#: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57
+msgid "Custom Units"
+msgstr "自定義單位"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:179
+#: src/pages/part/CategoryDetail.tsx:294
+msgid "Part Parameters"
+msgstr "零件參數"
+
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:185
 msgid "Category Parameters"
 msgstr "類別參數"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:180
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:191
 msgid "Stocktake"
 msgstr "庫存盤點"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:198
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:209
 msgid "Location Types"
 msgstr "位置類型"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:210
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:221
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:48
 #: src/tables/machine/MachineTypeTable.tsx:308
 msgid "Machines"
@@ -5319,17 +5373,17 @@ msgstr "設備"
 #~ msgid "Quick Actions"
 #~ msgstr "Quick Actions"
 
-#: src/pages/Index/Settings/AdminCenter/Index.tsx:225
-msgid "Advanced Options"
-msgstr "高級選項"
-
 #: src/pages/Index/Settings/AdminCenter/Index.tsx:226
 #~ msgid "Add a new user"
 #~ msgstr "Add a new user"
 
+#: src/pages/Index/Settings/AdminCenter/Index.tsx:236
+msgid "Advanced Options"
+msgstr "高級選項"
+
 #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40
-msgid "Generated Labels"
-msgstr ""
+#~ msgid "Generated Labels"
+#~ msgstr "Generated Labels"
 
 #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:43
 #~ msgid "Machine types"
@@ -5392,21 +5446,21 @@ msgstr "此 InvenTree 未啓用外部插件。"
 msgid "Plugin Errors"
 msgstr "插件錯誤"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:22
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16
 msgid "Page Size"
 msgstr "頁面尺寸"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19
 msgid "Landscape"
 msgstr "橫屏模式"
 
-#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31
+#: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25
 msgid "Attach to Model"
 msgstr "附加到模型"
 
 #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55
-msgid "Generated Reports"
-msgstr ""
+#~ msgid "Generated Reports"
+#~ msgstr "Generated Reports"
 
 #: src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx:25
 msgid "Stocktake Reports"
@@ -5487,6 +5541,10 @@ msgstr "所有單位"
 #~ msgid "System settings"
 #~ msgstr "System settings"
 
+#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:41
+msgid "Tokens"
+msgstr ""
+
 #: src/pages/Index/Settings/SystemSettings.tsx:94
 msgid "Barcodes"
 msgstr "條碼"
@@ -5517,7 +5575,7 @@ msgid "Reporting"
 msgstr "報告"
 
 #: src/pages/Index/Settings/SystemSettings.tsx:243
-#: src/pages/build/BuildIndex.tsx:27
+#: src/pages/build/BuildIndex.tsx:63
 #: src/pages/part/PartDetail.tsx:540
 #: src/pages/sales/SalesOrderDetail.tsx:379
 msgid "Build Orders"
@@ -5556,20 +5614,20 @@ msgstr "顯示選項"
 #~ msgstr "Go to the start page"
 
 #: src/pages/Notifications.tsx:44
-msgid "Delete Notifications"
-msgstr "刪除通知"
+#~ msgid "Delete Notifications"
+#~ msgstr "Delete Notifications"
 
-#: src/pages/Notifications.tsx:104
+#: src/pages/Notifications.tsx:83
 msgid "History"
 msgstr "歷史記錄"
 
-#: src/pages/Notifications.tsx:112
+#: src/pages/Notifications.tsx:91
 msgid "Mark as unread"
 msgstr "標記為未讀"
 
 #: src/pages/Notifications.tsx:146
-msgid "Delete notifications"
-msgstr ""
+#~ msgid "Delete notifications"
+#~ msgstr "Delete notifications"
 
 #: src/pages/build/BuildDetail.tsx:80
 #~ msgid "Build Status"
@@ -5584,9 +5642,9 @@ msgstr ""
 #: src/tables/bom/UsedInTable.tsx:39
 #: src/tables/build/BuildAllocatedStockTable.tsx:104
 #: src/tables/build/BuildLineTable.tsx:324
-#: src/tables/build/BuildOrderTable.tsx:76
+#: src/tables/build/BuildOrderTable.tsx:77
 #: src/tables/part/RelatedPartTable.tsx:69
-#: src/tables/sales/SalesOrderAllocationTable.tsx:131
+#: src/tables/sales/SalesOrderAllocationTable.tsx:135
 #: src/tables/sales/SalesOrderLineItemTable.tsx:86
 #: src/tables/stock/StockItemTable.tsx:60
 msgid "IPN"
@@ -5643,17 +5701,43 @@ msgstr "責任人"
 #~ msgid "View part barcode"
 #~ msgstr "View part barcode"
 
-#: src/pages/build/BuildDetail.tsx:187
-#: src/tables/settings/PendingTasksTable.tsx:36
-msgid "Created"
-msgstr "已創建"
-
 #: src/pages/build/BuildDetail.tsx:190
 #: src/pages/part/PartDetail.tsx:274
 #~ msgid "Link custom barcode to part"
 #~ msgstr "Link custom barcode to part"
 
-#: src/pages/build/BuildDetail.tsx:195
+#: src/pages/build/BuildDetail.tsx:196
+#: src/pages/part/PartDetail.tsx:280
+#~ msgid "Unlink custom barcode from part"
+#~ msgstr "Unlink custom barcode from part"
+
+#: src/pages/build/BuildDetail.tsx:198
+msgid "Any location"
+msgstr "任意地點"
+
+#: src/pages/build/BuildDetail.tsx:202
+#~ msgid "Build Order updated"
+#~ msgstr "Build Order updated"
+
+#: src/pages/build/BuildDetail.tsx:205
+msgid "Destination Location"
+msgstr "目標地點"
+
+#: src/pages/build/BuildDetail.tsx:221
+#: src/tables/settings/ApiTokenTable.tsx:95
+#: src/tables/settings/PendingTasksTable.tsx:36
+msgid "Created"
+msgstr "已創建"
+
+#: src/pages/build/BuildDetail.tsx:221
+#~ msgid "Edit build order"
+#~ msgstr "Edit build order"
+
+#: src/pages/build/BuildDetail.tsx:226
+#~ msgid "Duplicate build order"
+#~ msgstr "Duplicate build order"
+
+#: src/pages/build/BuildDetail.tsx:229
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:255
 #: src/pages/sales/ReturnOrderDetail.tsx:220
 #: src/pages/sales/SalesOrderDetail.tsx:231
@@ -5661,16 +5745,11 @@ msgstr "已創建"
 msgid "Start Date"
 msgstr ""
 
-#: src/pages/build/BuildDetail.tsx:196
-#: src/pages/part/PartDetail.tsx:280
-#~ msgid "Unlink custom barcode from part"
-#~ msgstr "Unlink custom barcode from part"
+#: src/pages/build/BuildDetail.tsx:231
+#~ msgid "Delete build order"
+#~ msgstr "Delete build order"
 
-#: src/pages/build/BuildDetail.tsx:202
-#~ msgid "Build Order updated"
-#~ msgstr "Build Order updated"
-
-#: src/pages/build/BuildDetail.tsx:203
+#: src/pages/build/BuildDetail.tsx:237
 #: src/pages/purchasing/PurchaseOrderDetail.tsx:263
 #: src/pages/sales/ReturnOrderDetail.tsx:228
 #: src/pages/sales/SalesOrderDetail.tsx:239
@@ -5681,31 +5760,11 @@ msgstr ""
 msgid "Target Date"
 msgstr "預計日期"
 
-#: src/pages/build/BuildDetail.tsx:211
+#: src/pages/build/BuildDetail.tsx:245
 #: src/tables/sales/SalesOrderLineItemTable.tsx:303
 msgid "Completed"
 msgstr "已完成"
 
-#: src/pages/build/BuildDetail.tsx:221
-#~ msgid "Edit build order"
-#~ msgstr "Edit build order"
-
-#: src/pages/build/BuildDetail.tsx:226
-#~ msgid "Duplicate build order"
-#~ msgstr "Duplicate build order"
-
-#: src/pages/build/BuildDetail.tsx:231
-#~ msgid "Delete build order"
-#~ msgstr "Delete build order"
-
-#: src/pages/build/BuildDetail.tsx:233
-msgid "Any location"
-msgstr "任意地點"
-
-#: src/pages/build/BuildDetail.tsx:240
-msgid "Destination Location"
-msgstr "目標地點"
-
 #: src/pages/build/BuildDetail.tsx:276
 msgid "Build Details"
 msgstr "生產詳情"
@@ -5727,7 +5786,7 @@ msgstr "未出產"
 
 #: src/pages/build/BuildDetail.tsx:316
 #: src/pages/sales/SalesOrderDetail.tsx:365
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:211
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:212
 msgid "Allocated Stock"
 msgstr "已分配的庫存"
 
@@ -5763,8 +5822,8 @@ msgid "Edit Build Order"
 msgstr "編輯生產訂單"
 
 #: src/pages/build/BuildDetail.tsx:395
-#: src/tables/build/BuildOrderTable.tsx:186
-#: src/tables/build/BuildOrderTable.tsx:201
+#: src/tables/build/BuildOrderTable.tsx:180
+#: src/tables/build/BuildOrderTable.tsx:195
 msgid "Add Build Order"
 msgstr "添加生產訂單"
 
@@ -5902,6 +5961,20 @@ msgstr "生產訂單"
 #~ msgid "New Build Order"
 #~ msgstr "New Build Order"
 
+#: src/pages/build/BuildIndex.tsx:71
+#: src/pages/purchasing/PurchasingIndex.tsx:69
+#: src/pages/sales/SalesIndex.tsx:90
+#: src/pages/sales/SalesIndex.tsx:111
+msgid "Table View"
+msgstr ""
+
+#: src/pages/build/BuildIndex.tsx:74
+#: src/pages/purchasing/PurchasingIndex.tsx:72
+#: src/pages/sales/SalesIndex.tsx:93
+#: src/pages/sales/SalesIndex.tsx:114
+msgid "Calendar View"
+msgstr ""
+
 #: src/pages/company/CompanyDetail.tsx:99
 msgid "Website"
 msgstr "網站"
@@ -5946,7 +6019,7 @@ msgstr "製造商"
 #: src/pages/part/pricing/SaleHistoryPanel.tsx:31
 #: src/pages/sales/ReturnOrderDetail.tsx:104
 #: src/pages/sales/SalesOrderDetail.tsx:113
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:103
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:104
 #: src/pages/stock/StockDetail.tsx:294
 #: src/tables/company/CompanyTable.tsx:111
 #: src/tables/sales/ReturnOrderTable.tsx:112
@@ -6068,7 +6141,7 @@ msgstr "包裝數量"
 #: src/pages/company/SupplierPartDetail.tsx:387
 #: src/pages/part/PartDetail.tsx:772
 #: src/tables/bom/BomTable.tsx:330
-#: src/tables/part/PartTable.tsx:90
+#: src/tables/part/PartTable.tsx:93
 msgid "On Order"
 msgstr "訂購中"
 
@@ -6163,8 +6236,8 @@ msgstr "子類別"
 
 #: src/pages/part/CategoryDetail.tsx:144
 #: src/pages/stock/LocationDetail.tsx:137
-#: src/tables/part/PartCategoryTable.tsx:85
-#: src/tables/stock/StockLocationTable.tsx:40
+#: src/tables/part/PartCategoryTable.tsx:88
+#: src/tables/stock/StockLocationTable.tsx:43
 msgid "Structural"
 msgstr "結構性"
 
@@ -6182,7 +6255,7 @@ msgstr "最高級零件類別"
 
 #: src/pages/part/CategoryDetail.tsx:178
 #: src/pages/part/CategoryDetail.tsx:236
-#: src/tables/part/PartCategoryTable.tsx:118
+#: src/tables/part/PartCategoryTable.tsx:121
 msgid "Edit Part Category"
 msgstr "編輯零件類別"
 
@@ -6217,6 +6290,7 @@ msgid "Action for child categories in this category"
 msgstr "對此類別中零件的操作"
 
 #: src/pages/part/CategoryDetail.tsx:232
+#: src/tables/part/PartCategoryTable.tsx:142
 msgid "Category Actions"
 msgstr "類別操作"
 
@@ -6226,13 +6300,13 @@ msgstr "類別詳情"
 
 #: src/pages/part/PartAllocationPanel.tsx:21
 #: src/pages/stock/StockDetail.tsx:463
-#: src/tables/part/PartTable.tsx:103
+#: src/tables/part/PartTable.tsx:106
 msgid "Build Order Allocations"
 msgstr "分配生產訂單"
 
 #: src/pages/part/PartAllocationPanel.tsx:31
 #: src/pages/stock/StockDetail.tsx:478
-#: src/tables/part/PartTable.tsx:111
+#: src/tables/part/PartTable.tsx:114
 msgid "Sales Order Allocations"
 msgstr "分配銷售訂單"
 
@@ -6250,7 +6324,7 @@ msgid "Revision"
 msgstr "版本"
 
 #: src/pages/part/PartDetail.tsx:205
-#: src/tables/build/BuildOrderTable.tsx:159
+#: src/tables/Filter.tsx:342
 #: src/tables/notifications/NotificationTable.tsx:32
 #: src/tables/part/PartCategoryTemplateTable.tsx:67
 msgid "Category"
@@ -6277,7 +6351,7 @@ msgstr "關鍵詞"
 #: src/pages/part/PartDetail.tsx:257
 #: src/tables/bom/BomTable.tsx:325
 #: src/tables/build/BuildLineTable.tsx:293
-#: src/tables/part/PartTable.tsx:294
+#: src/tables/part/PartTable.tsx:297
 #: src/tables/sales/SalesOrderLineItemTable.tsx:127
 msgid "Available Stock"
 msgstr "可用庫存"
@@ -6337,7 +6411,7 @@ msgstr "生產中"
 
 #: src/pages/part/PartDetail.tsx:336
 #: src/tables/part/ParametricPartTable.tsx:229
-#: src/tables/part/PartTable.tsx:184
+#: src/tables/part/PartTable.tsx:187
 msgid "Locked"
 msgstr "已鎖定"
 
@@ -6381,14 +6455,12 @@ msgstr "虛擬零件"
 #: src/pages/sales/ReturnOrderDetail.tsx:204
 #: src/pages/sales/SalesOrderDetail.tsx:216
 #: src/tables/ColumnRenderers.tsx:268
-#: src/tables/settings/TemplateTable.tsx:445
 msgid "Creation Date"
 msgstr "創建日期"
 
 #: src/pages/part/PartDetail.tsx:398
 #: src/tables/ColumnRenderers.tsx:216
 #: src/tables/Filter.tsx:326
-#: src/tables/settings/TemplateTable.tsx:458
 msgid "Created By"
 msgstr "創建人"
 
@@ -6399,7 +6471,7 @@ msgstr "默認供應商"
 #: src/pages/part/PartDetail.tsx:424
 #: src/pages/part/pricing/BomPricingPanel.tsx:113
 #: src/pages/part/pricing/VariantPricingPanel.tsx:97
-#: src/tables/part/PartTable.tsx:161
+#: src/tables/part/PartTable.tsx:164
 msgid "Price Range"
 msgstr "價格範圍"
 
@@ -6448,7 +6520,7 @@ msgstr "關聯零件"
 #: src/pages/stock/StockDetail.tsx:191
 #: src/pages/stock/StockDetail.tsx:850
 #: src/tables/build/BuildLineTable.tsx:186
-#: src/tables/part/PartTable.tsx:119
+#: src/tables/part/PartTable.tsx:122
 #: src/tables/stock/StockItemTable.tsx:172
 #: src/tables/stock/StockItemTable.tsx:327
 msgid "Available"
@@ -6465,8 +6537,8 @@ msgid "Edit Part"
 msgstr "編輯零件"
 
 #: src/pages/part/PartDetail.tsx:832
-#: src/tables/part/PartTable.tsx:337
-#: src/tables/part/PartTable.tsx:366
+#: src/tables/part/PartTable.tsx:340
+#: src/tables/part/PartTable.tsx:390
 msgid "Add Part"
 msgstr "添加零件"
 
@@ -6493,7 +6565,7 @@ msgid "Transfer part stock"
 msgstr "轉移零件庫存"
 
 #: src/pages/part/PartDetail.tsx:924
-#: src/pages/part/PartSchedulingDetail.tsx:70
+#: src/pages/part/PartSchedulingDetail.tsx:71
 #: src/pages/stock/StockDetail.tsx:766
 msgid "Order"
 msgstr "訂單"
@@ -6505,7 +6577,7 @@ msgid "Order Stock"
 msgstr "訂單庫存"
 
 #: src/pages/part/PartDetail.tsx:938
-#: src/tables/part/PartTable.tsx:349
+#: src/tables/part/PartTable.tsx:362
 msgid "Part Actions"
 msgstr "零件選項"
 
@@ -6555,36 +6627,36 @@ msgstr "銷售價格"
 msgid "Sale History"
 msgstr "銷售記錄"
 
-#: src/pages/part/PartSchedulingDetail.tsx:47
+#: src/pages/part/PartSchedulingDetail.tsx:48
 #: src/pages/part/PartSchedulingDetail.tsx:301
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:170
 msgid "Maximum"
 msgstr "最大值"
 
-#: src/pages/part/PartSchedulingDetail.tsx:50
+#: src/pages/part/PartSchedulingDetail.tsx:51
 #: src/pages/part/PartSchedulingDetail.tsx:291
 msgid "Scheduled"
 msgstr "排定"
 
-#: src/pages/part/PartSchedulingDetail.tsx:53
+#: src/pages/part/PartSchedulingDetail.tsx:54
 #: src/pages/part/PartSchedulingDetail.tsx:296
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:158
 msgid "Minimum"
 msgstr "最小值"
 
-#: src/pages/part/PartSchedulingDetail.tsx:94
+#: src/pages/part/PartSchedulingDetail.tsx:95
 msgid "Quantity is speculative"
 msgstr "數量是投機的"
 
-#: src/pages/part/PartSchedulingDetail.tsx:103
+#: src/pages/part/PartSchedulingDetail.tsx:104
 msgid "No date available for provided quantity"
 msgstr "沒有提供數量的可用日期"
 
-#: src/pages/part/PartSchedulingDetail.tsx:107
+#: src/pages/part/PartSchedulingDetail.tsx:108
 msgid "Date is in the past"
 msgstr "指定日期已過"
 
-#: src/pages/part/PartSchedulingDetail.tsx:114
+#: src/pages/part/PartSchedulingDetail.tsx:115
 msgid "Scheduled Quantity"
 msgstr "計劃數量"
 
@@ -6600,42 +6672,42 @@ msgstr ""
 msgid "Expected Quantity"
 msgstr "預期的數量"
 
-#: src/pages/part/PartStocktakeDetail.tsx:84
+#: src/pages/part/PartStocktakeDetail.tsx:85
 msgid "Edit Stocktake Entry"
 msgstr "編輯盤點條目"
 
-#: src/pages/part/PartStocktakeDetail.tsx:92
+#: src/pages/part/PartStocktakeDetail.tsx:93
 msgid "Delete Stocktake Entry"
 msgstr "刪除盤點條目"
 
-#: src/pages/part/PartStocktakeDetail.tsx:98
+#: src/pages/part/PartStocktakeDetail.tsx:99
 #: src/tables/settings/StocktakeReportTable.tsx:70
 msgid "Generate Stocktake Report"
 msgstr "生成盤點報告"
 
-#: src/pages/part/PartStocktakeDetail.tsx:103
+#: src/pages/part/PartStocktakeDetail.tsx:104
 #: src/tables/settings/StocktakeReportTable.tsx:72
 msgid "Stocktake report scheduled"
 msgstr "計劃盤點報告"
 
-#: src/pages/part/PartStocktakeDetail.tsx:121
-#: src/pages/part/PartStocktakeDetail.tsx:239
+#: src/pages/part/PartStocktakeDetail.tsx:122
+#: src/pages/part/PartStocktakeDetail.tsx:240
 #: src/pages/stock/StockDetail.tsx:326
 #: src/tables/stock/StockItemTable.tsx:257
 msgid "Stock Value"
 msgstr "庫存價值"
 
-#: src/pages/part/PartStocktakeDetail.tsx:144
+#: src/pages/part/PartStocktakeDetail.tsx:145
 #: src/tables/settings/StocktakeReportTable.tsx:78
 msgid "New Stocktake Report"
 msgstr "盤點報告"
 
-#: src/pages/part/PartStocktakeDetail.tsx:268
+#: src/pages/part/PartStocktakeDetail.tsx:269
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:327
 msgid "Minimum Value"
 msgstr "最小值"
 
-#: src/pages/part/PartStocktakeDetail.tsx:274
+#: src/pages/part/PartStocktakeDetail.tsx:275
 #: src/pages/part/pricing/PricingOverviewPanel.tsx:328
 msgid "Maximum Value"
 msgstr "最大值"
@@ -6657,7 +6729,7 @@ msgstr "總價"
 #: src/pages/part/pricing/BomPricingPanel.tsx:141
 #: src/tables/bom/UsedInTable.tsx:49
 #: src/tables/build/BuildLineTable.tsx:303
-#: src/tables/part/PartTable.tsx:202
+#: src/tables/part/PartTable.tsx:205
 msgid "Component"
 msgstr "組件"
 
@@ -6894,7 +6966,7 @@ msgstr ""
 #: src/pages/sales/ReturnOrderDetail.tsx:236
 #: src/pages/sales/SalesOrderDetail.tsx:246
 #: src/tables/ColumnRenderers.tsx:276
-#: src/tables/build/BuildOrderTable.tsx:111
+#: src/tables/build/BuildOrderTable.tsx:112
 #: src/tables/part/PartPurchaseOrdersTable.tsx:105
 msgid "Completion Date"
 msgstr ""
@@ -6935,7 +7007,7 @@ msgstr "訂單操作"
 
 #: src/pages/sales/ReturnOrderDetail.tsx:95
 #: src/pages/sales/SalesOrderDetail.tsx:104
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:112
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:113
 #: src/tables/sales/SalesOrderTable.tsx:153
 msgid "Customer Reference"
 msgstr "客户參考"
@@ -7025,36 +7097,36 @@ msgstr "完成銷售訂單"
 msgid "Ship Order"
 msgstr "裝貨單"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:120
-#: src/tables/sales/SalesOrderShipmentTable.tsx:93
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:121
+#: src/tables/sales/SalesOrderShipmentTable.tsx:94
 msgid "Shipment Reference"
 msgstr "配送參考"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:127
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:128
 msgid "Allocated Items"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:136
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:137
 msgid "Tracking Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:144
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:145
 msgid "Invoice Number"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:152
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:153
 #: src/tables/ColumnRenderers.tsx:284
-#: src/tables/sales/SalesOrderAllocationTable.tsx:177
-#: src/tables/sales/SalesOrderShipmentTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:181
+#: src/tables/sales/SalesOrderShipmentTable.tsx:113
 msgid "Shipment Date"
 msgstr "發貨日期"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:160
-#: src/tables/sales/SalesOrderShipmentTable.tsx:116
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:117
 msgid "Delivery Date"
 msgstr "送達日期"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:205
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:206
 msgid "Shipment Details"
 msgstr ""
 
@@ -7062,45 +7134,45 @@ msgstr ""
 #~ msgid "Assigned Items"
 #~ msgstr "Assigned Items"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:242
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:333
-#: src/tables/sales/SalesOrderShipmentTable.tsx:72
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:244
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:335
+#: src/tables/sales/SalesOrderShipmentTable.tsx:73
 msgid "Edit Shipment"
 msgstr "編輯配送"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:249
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:338
-#: src/tables/sales/SalesOrderShipmentTable.tsx:64
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:251
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:340
+#: src/tables/sales/SalesOrderShipmentTable.tsx:65
 msgid "Cancel Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:262
-#: src/tables/sales/SalesOrderShipmentTable.tsx:80
-#: src/tables/sales/SalesOrderShipmentTable.tsx:143
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:264
+#: src/tables/sales/SalesOrderShipmentTable.tsx:81
+#: src/tables/sales/SalesOrderShipmentTable.tsx:144
 msgid "Complete Shipment"
 msgstr "完成配送"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:279
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:281
 #: src/tables/part/PartPurchaseOrdersTable.tsx:121
 msgid "Pending"
 msgstr "待定"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:285
-#: src/tables/sales/SalesOrderShipmentTable.tsx:105
-#: src/tables/sales/SalesOrderShipmentTable.tsx:189
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:287
+#: src/tables/sales/SalesOrderShipmentTable.tsx:106
+#: src/tables/sales/SalesOrderShipmentTable.tsx:190
 msgid "Shipped"
 msgstr "已配送"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:291
-#: src/tables/sales/SalesOrderShipmentTable.tsx:194
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:293
+#: src/tables/sales/SalesOrderShipmentTable.tsx:195
 msgid "Delivered"
 msgstr "已送達"
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:306
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:308
 msgid "Send Shipment"
 msgstr ""
 
-#: src/pages/sales/SalesOrderShipmentDetail.tsx:328
+#: src/pages/sales/SalesOrderShipmentDetail.tsx:330
 msgid "Shipment Actions"
 msgstr ""
 
@@ -7113,12 +7185,12 @@ msgid "Sublocations"
 msgstr "次級地點"
 
 #: src/pages/stock/LocationDetail.tsx:143
-#: src/tables/stock/StockLocationTable.tsx:45
+#: src/tables/stock/StockLocationTable.tsx:48
 msgid "External"
 msgstr "外部"
 
 #: src/pages/stock/LocationDetail.tsx:149
-#: src/tables/stock/StockLocationTable.tsx:54
+#: src/tables/stock/StockLocationTable.tsx:57
 msgid "Location Type"
 msgstr "位置類型"
 
@@ -7136,7 +7208,7 @@ msgstr "默認零件"
 
 #: src/pages/stock/LocationDetail.tsx:216
 #: src/pages/stock/LocationDetail.tsx:335
-#: src/tables/stock/StockLocationTable.tsx:116
+#: src/tables/stock/StockLocationTable.tsx:119
 msgid "Edit Stock Location"
 msgstr "編輯庫存地點"
 
@@ -7166,6 +7238,7 @@ msgid "Action for child locations in this location"
 msgstr "對此位置中的子位置執行的操作"
 
 #: src/pages/stock/LocationDetail.tsx:331
+#: src/tables/stock/StockLocationTable.tsx:140
 msgid "Location Actions"
 msgstr "位置操作"
 
@@ -7376,28 +7449,28 @@ msgstr "選擇列"
 #~ msgstr "Excel"
 
 #: src/tables/DownloadAction.tsx:21
-msgid "CSV"
-msgstr "CSV"
+#~ msgid "CSV"
+#~ msgstr "CSV"
 
 #: src/tables/DownloadAction.tsx:21
 #~ msgid "Download selected data"
 #~ msgstr "Download selected data"
 
 #: src/tables/DownloadAction.tsx:22
-msgid "TSV"
-msgstr "TSV"
+#~ msgid "TSV"
+#~ msgstr "TSV"
 
 #: src/tables/DownloadAction.tsx:23
-msgid "Excel (.xlsx)"
-msgstr "Excel (.xlsx)"
+#~ msgid "Excel (.xlsx)"
+#~ msgstr "Excel (.xlsx)"
 
 #: src/tables/DownloadAction.tsx:24
 #~ msgid "Excel (.xls)"
 #~ msgstr "Excel (.xls)"
 
 #: src/tables/DownloadAction.tsx:36
-msgid "Download Data"
-msgstr "下載數據"
+#~ msgid "Download Data"
+#~ msgstr "Download Data"
 
 #: src/tables/Filter.tsx:106
 #~ msgid "Show overdue orders"
@@ -7412,7 +7485,7 @@ msgid "Show orders assigned to me"
 msgstr "顯示分配給我的訂單"
 
 #: src/tables/Filter.tsx:132
-#: src/tables/sales/SalesOrderAllocationTable.tsx:73
+#: src/tables/sales/SalesOrderAllocationTable.tsx:77
 msgid "Outstanding"
 msgstr "未完成"
 
@@ -7420,10 +7493,6 @@ msgstr "未完成"
 msgid "Show outstanding items"
 msgstr ""
 
-#: src/tables/Filter.tsx:140
-msgid "Overdue"
-msgstr "逾期"
-
 #: src/tables/Filter.tsx:141
 msgid "Show overdue items"
 msgstr ""
@@ -7530,6 +7599,7 @@ msgid "Filter by responsible owner"
 msgstr "根據負責人進行篩選"
 
 #: src/tables/Filter.tsx:315
+#: src/tables/settings/ApiTokenTable.tsx:119
 #: src/tables/stock/StockTrackingTable.tsx:189
 msgid "Filter by user"
 msgstr "按用户篩選"
@@ -7542,6 +7612,10 @@ msgstr ""
 msgid "Filter by user who issued the order"
 msgstr ""
 
+#: src/tables/Filter.tsx:343
+msgid "Filter by part category"
+msgstr ""
+
 #: src/tables/FilterSelectDrawer.tsx:58
 msgid "Remove filter"
 msgstr "移除過濾器"
@@ -7560,16 +7634,16 @@ msgstr ""
 msgid "Select date value"
 msgstr ""
 
-#: src/tables/FilterSelectDrawer.tsx:260
+#: src/tables/FilterSelectDrawer.tsx:258
 msgid "Select filter"
 msgstr "選擇過濾器"
 
-#: src/tables/FilterSelectDrawer.tsx:261
+#: src/tables/FilterSelectDrawer.tsx:259
 msgid "Filter"
 msgstr "過濾器"
 
 #: src/tables/FilterSelectDrawer.tsx:311
-#: src/tables/InvenTreeTableHeader.tsx:227
+#: src/tables/InvenTreeTableHeader.tsx:236
 msgid "Table Filters"
 msgstr "表格篩選"
 
@@ -7633,29 +7707,37 @@ msgstr "服務器返回了錯誤的數據類型"
 #~ msgid "Clear custom query filters"
 #~ msgstr "Clear custom query filters"
 
-#: src/tables/InvenTreeTableHeader.tsx:98
+#: src/tables/InvenTreeTableHeader.tsx:95
 msgid "Delete Selected Items"
 msgstr "刪除所選項目"
 
-#: src/tables/InvenTreeTableHeader.tsx:102
+#: src/tables/InvenTreeTableHeader.tsx:99
 msgid "Are you sure you want to delete the selected items?"
 msgstr "確定要刪除所選的項目嗎?"
 
-#: src/tables/InvenTreeTableHeader.tsx:104
+#: src/tables/InvenTreeTableHeader.tsx:101
 #: src/tables/plugin/PluginListTable.tsx:304
 msgid "This action cannot be undone"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:154
+#: src/tables/InvenTreeTableHeader.tsx:112
+msgid "Items deleted"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:117
+msgid "Failed to delete items"
+msgstr ""
+
+#: src/tables/InvenTreeTableHeader.tsx:163
 msgid "Custom table filters are active"
 msgstr ""
 
-#: src/tables/InvenTreeTableHeader.tsx:180
+#: src/tables/InvenTreeTableHeader.tsx:189
 #: src/tables/general/BarcodeScanTable.tsx:93
 msgid "Delete selected records"
 msgstr "刪除選中的記錄"
 
-#: src/tables/InvenTreeTableHeader.tsx:200
+#: src/tables/InvenTreeTableHeader.tsx:209
 msgid "Refresh data"
 msgstr "刷新數據"
 
@@ -7677,7 +7759,7 @@ msgstr "零件信息"
 
 #: src/tables/bom/BomTable.tsx:214
 #: src/tables/build/BuildLineTable.tsx:264
-#: src/tables/part/PartTable.tsx:127
+#: src/tables/part/PartTable.tsx:130
 msgid "External stock"
 msgstr "外部庫存"
 
@@ -7693,12 +7775,12 @@ msgid "Includes variant stock"
 msgstr "包括變體庫存"
 
 #: src/tables/bom/BomTable.tsx:247
-#: src/tables/part/PartTable.tsx:96
+#: src/tables/part/PartTable.tsx:99
 msgid "Building"
 msgstr "正在生產"
 
 #: src/tables/bom/BomTable.tsx:256
-#: src/tables/part/PartTable.tsx:153
+#: src/tables/part/PartTable.tsx:156
 #: src/tables/sales/SalesOrderLineItemTable.tsx:174
 #: src/tables/stock/StockItemTable.tsx:212
 msgid "Stock Information"
@@ -7815,7 +7897,7 @@ msgid "Show consumable items"
 msgstr "顯示可消耗項目"
 
 #: src/tables/bom/BomTable.tsx:360
-#: src/tables/part/PartTable.tsx:288
+#: src/tables/part/PartTable.tsx:291
 msgid "Has Pricing"
 msgstr "是否有價格"
 
@@ -7894,7 +7976,7 @@ msgstr "無法編輯材料清單,因為零件已鎖定"
 #: src/tables/bom/UsedInTable.tsx:33
 #: src/tables/build/BuildLineTable.tsx:201
 #: src/tables/part/ParametricPartTable.tsx:234
-#: src/tables/part/PartTable.tsx:190
+#: src/tables/part/PartTable.tsx:193
 #: src/tables/stock/StockItemTable.tsx:317
 msgid "Assembly"
 msgstr "裝配"
@@ -7904,7 +7986,7 @@ msgid "Show active assemblies"
 msgstr "顯示活動裝配體"
 
 #: src/tables/bom/UsedInTable.tsx:90
-#: src/tables/part/PartTable.tsx:214
+#: src/tables/part/PartTable.tsx:217
 #: src/tables/part/PartVariantTable.tsx:30
 msgid "Trackable"
 msgstr "可追蹤"
@@ -7922,21 +8004,21 @@ msgid "Show items allocated to a build output"
 msgstr "顯示分配給構建輸出的項目"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:65
-#: src/tables/build/BuildOrderTable.tsx:172
+#: src/tables/build/BuildOrderTable.tsx:166
 #: src/tables/part/PartParameterTable.tsx:212
 #: src/tables/part/PartPurchaseOrdersTable.tsx:138
 #: src/tables/sales/ReturnOrderTable.tsx:99
-#: src/tables/sales/SalesOrderAllocationTable.tsx:87
+#: src/tables/sales/SalesOrderAllocationTable.tsx:91
 #: src/tables/sales/SalesOrderTable.tsx:100
 #: src/tables/stock/StockItemTable.tsx:352
 msgid "Include Variants"
 msgstr "包含變體"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:66
-#: src/tables/build/BuildOrderTable.tsx:173
+#: src/tables/build/BuildOrderTable.tsx:167
 #: src/tables/part/PartPurchaseOrdersTable.tsx:139
 #: src/tables/sales/ReturnOrderTable.tsx:100
-#: src/tables/sales/SalesOrderAllocationTable.tsx:88
+#: src/tables/sales/SalesOrderAllocationTable.tsx:92
 #: src/tables/sales/SalesOrderTable.tsx:101
 msgid "Include orders for part variants"
 msgstr ""
@@ -7945,17 +8027,17 @@ msgstr ""
 #: src/tables/part/PartBuildAllocationsTable.tsx:62
 #: src/tables/part/PartPurchaseOrdersTable.tsx:131
 #: src/tables/part/PartSalesAllocationsTable.tsx:58
-#: src/tables/sales/SalesOrderAllocationTable.tsx:112
+#: src/tables/sales/SalesOrderAllocationTable.tsx:116
 msgid "Order Status"
 msgstr "訂單狀態"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:117
-#: src/tables/sales/SalesOrderAllocationTable.tsx:158
+#: src/tables/sales/SalesOrderAllocationTable.tsx:162
 msgid "Allocated Quantity"
 msgstr "已分配數量"
 
 #: src/tables/build/BuildAllocatedStockTable.tsx:137
-#: src/tables/sales/SalesOrderAllocationTable.tsx:151
+#: src/tables/sales/SalesOrderAllocationTable.tsx:155
 msgid "Available Quantity"
 msgstr "可用數量"
 
@@ -7998,7 +8080,7 @@ msgid "Show optional lines"
 msgstr "顯示可選項目"
 
 #: src/tables/build/BuildLineTable.tsx:206
-#: src/tables/part/PartTable.tsx:208
+#: src/tables/part/PartTable.tsx:211
 msgid "Testable"
 msgstr "可測試"
 
@@ -8113,38 +8195,34 @@ msgstr ""
 #~ msgid "Filter by whether the purchase order has a project code"
 #~ msgstr "Filter by whether the purchase order has a project code"
 
-#: src/tables/build/BuildOrderTable.tsx:142
+#: src/tables/build/BuildOrderTable.tsx:143
 #: src/tables/purchasing/PurchaseOrderTable.tsx:81
 #: src/tables/sales/ReturnOrderTable.tsx:78
 #: src/tables/sales/SalesOrderTable.tsx:79
 msgid "Has Target Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:143
+#: src/tables/build/BuildOrderTable.tsx:144
 #: src/tables/purchasing/PurchaseOrderTable.tsx:82
 #: src/tables/sales/ReturnOrderTable.tsx:79
 #: src/tables/sales/SalesOrderTable.tsx:80
 msgid "Show orders with a target date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:148
+#: src/tables/build/BuildOrderTable.tsx:149
 #: src/tables/purchasing/PurchaseOrderTable.tsx:87
 #: src/tables/sales/ReturnOrderTable.tsx:84
 #: src/tables/sales/SalesOrderTable.tsx:85
 msgid "Has Start Date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:149
+#: src/tables/build/BuildOrderTable.tsx:150
 #: src/tables/purchasing/PurchaseOrderTable.tsx:88
 #: src/tables/sales/ReturnOrderTable.tsx:85
 #: src/tables/sales/SalesOrderTable.tsx:86
 msgid "Show orders with a start date"
 msgstr ""
 
-#: src/tables/build/BuildOrderTable.tsx:160
-msgid "Filter by part category"
-msgstr ""
-
 #: src/tables/build/BuildOrderTable.tsx:179
 #~ msgid "Filter by user who issued this order"
 #~ msgstr "Filter by user who issued this order"
@@ -8665,32 +8743,45 @@ msgstr ""
 msgid "View Build Order"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:48
+#: src/tables/part/PartCategoryTable.tsx:51
 msgid "You are subscribed to notifications for this category"
 msgstr ""
 
-#: src/tables/part/PartCategoryTable.tsx:80
-#: src/tables/part/PartTable.tsx:196
+#: src/tables/part/PartCategoryTable.tsx:83
+#: src/tables/part/PartTable.tsx:199
 msgid "Include Subcategories"
 msgstr "包含子類別"
 
-#: src/tables/part/PartCategoryTable.tsx:81
+#: src/tables/part/PartCategoryTable.tsx:84
 msgid "Include subcategories in results"
 msgstr "在結果中包含子類別"
 
-#: src/tables/part/PartCategoryTable.tsx:86
+#: src/tables/part/PartCategoryTable.tsx:89
 msgid "Show structural categories"
 msgstr "顯示結構性類別"
 
-#: src/tables/part/PartCategoryTable.tsx:91
+#: src/tables/part/PartCategoryTable.tsx:94
 msgid "Show categories to which the user is subscribed"
 msgstr "顯示用户訂閲的類別"
 
-#: src/tables/part/PartCategoryTable.tsx:100
+#: src/tables/part/PartCategoryTable.tsx:103
 msgid "New Part Category"
 msgstr "新建零件類別"
 
 #: src/tables/part/PartCategoryTable.tsx:129
+msgid "Set Parent Category"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:147
+#: src/tables/stock/StockLocationTable.tsx:145
+msgid "Set Parent"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:149
+msgid "Set parent category for the selected items"
+msgstr ""
+
+#: src/tables/part/PartCategoryTable.tsx:160
 msgid "Add Part Category"
 msgstr "增加零件類別"
 
@@ -8753,7 +8844,7 @@ msgid "Show templates with choices"
 msgstr "顯示有選項的模板"
 
 #: src/tables/part/PartParameterTemplateTable.tsx:41
-#: src/tables/part/PartTable.tsx:220
+#: src/tables/part/PartTable.tsx:223
 msgid "Has Units"
 msgstr "有單位"
 
@@ -8795,145 +8886,154 @@ msgstr "顯示已收到的條目"
 msgid "View Sales Order"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:81
+#: src/tables/part/PartTable.tsx:84
 msgid "Minimum stock"
 msgstr "最低庫存數"
 
-#: src/tables/part/PartTable.tsx:179
+#: src/tables/part/PartTable.tsx:182
 msgid "Filter by part active status"
 msgstr "按零件活動狀態篩選"
 
-#: src/tables/part/PartTable.tsx:185
+#: src/tables/part/PartTable.tsx:188
 msgid "Filter by part locked status"
 msgstr "按零件鎖定狀態篩選"
 
-#: src/tables/part/PartTable.tsx:191
+#: src/tables/part/PartTable.tsx:194
 msgid "Filter by assembly attribute"
 msgstr "按裝配屬性篩選"
 
-#: src/tables/part/PartTable.tsx:197
+#: src/tables/part/PartTable.tsx:200
 msgid "Include parts in subcategories"
 msgstr "包括子類別中的零件"
 
-#: src/tables/part/PartTable.tsx:203
+#: src/tables/part/PartTable.tsx:206
 msgid "Filter by component attribute"
 msgstr "按組件屬性篩選"
 
-#: src/tables/part/PartTable.tsx:209
+#: src/tables/part/PartTable.tsx:212
 msgid "Filter by testable attribute"
 msgstr "按可跟蹤屬性篩選"
 
-#: src/tables/part/PartTable.tsx:215
+#: src/tables/part/PartTable.tsx:218
 msgid "Filter by trackable attribute"
 msgstr "按可跟蹤屬性篩選"
 
-#: src/tables/part/PartTable.tsx:221
+#: src/tables/part/PartTable.tsx:224
 msgid "Filter by parts which have units"
 msgstr "按擁有單位的零件篩選"
 
-#: src/tables/part/PartTable.tsx:226
+#: src/tables/part/PartTable.tsx:229
 msgid "Has IPN"
 msgstr "有內部零件編碼"
 
-#: src/tables/part/PartTable.tsx:227
+#: src/tables/part/PartTable.tsx:230
 msgid "Filter by parts which have an internal part number"
 msgstr "按具有內部零件編號的零件篩選"
 
-#: src/tables/part/PartTable.tsx:232
+#: src/tables/part/PartTable.tsx:235
 msgid "Has Stock"
 msgstr "有庫存"
 
-#: src/tables/part/PartTable.tsx:233
+#: src/tables/part/PartTable.tsx:236
 msgid "Filter by parts which have stock"
 msgstr "按有庫存的零件篩選"
 
-#: src/tables/part/PartTable.tsx:239
+#: src/tables/part/PartTable.tsx:242
 msgid "Filter by parts which have low stock"
 msgstr "按庫存少的零件篩選"
 
-#: src/tables/part/PartTable.tsx:244
+#: src/tables/part/PartTable.tsx:247
 msgid "Purchaseable"
 msgstr "可購買"
 
-#: src/tables/part/PartTable.tsx:245
+#: src/tables/part/PartTable.tsx:248
 msgid "Filter by parts which are purchaseable"
 msgstr "按可購買的零件篩選"
 
-#: src/tables/part/PartTable.tsx:250
+#: src/tables/part/PartTable.tsx:253
 msgid "Salable"
 msgstr "可銷售"
 
-#: src/tables/part/PartTable.tsx:251
+#: src/tables/part/PartTable.tsx:254
 msgid "Filter by parts which are salable"
 msgstr "按可出售的零件篩選"
 
-#: src/tables/part/PartTable.tsx:256
-#: src/tables/part/PartTable.tsx:260
+#: src/tables/part/PartTable.tsx:259
+#: src/tables/part/PartTable.tsx:263
 #: src/tables/part/PartVariantTable.tsx:25
 msgid "Virtual"
 msgstr "虛擬"
 
-#: src/tables/part/PartTable.tsx:257
+#: src/tables/part/PartTable.tsx:260
 msgid "Filter by parts which are virtual"
 msgstr "按虛擬零件篩選"
 
-#: src/tables/part/PartTable.tsx:261
+#: src/tables/part/PartTable.tsx:264
 msgid "Not Virtual"
 msgstr "非虛擬的"
 
-#: src/tables/part/PartTable.tsx:266
+#: src/tables/part/PartTable.tsx:269
 msgid "Is Template"
 msgstr "是模板"
 
-#: src/tables/part/PartTable.tsx:267
+#: src/tables/part/PartTable.tsx:270
 msgid "Filter by parts which are templates"
 msgstr "按模板部分篩選零件"
 
-#: src/tables/part/PartTable.tsx:272
+#: src/tables/part/PartTable.tsx:275
 msgid "Is Variant"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:273
+#: src/tables/part/PartTable.tsx:276
 msgid "Filter by parts which are variants"
 msgstr ""
 
-#: src/tables/part/PartTable.tsx:278
+#: src/tables/part/PartTable.tsx:281
 msgid "Is Revision"
 msgstr "是否修訂"
 
-#: src/tables/part/PartTable.tsx:279
+#: src/tables/part/PartTable.tsx:282
 msgid "Filter by parts which are revisions"
 msgstr "按修訂零件篩選"
 
-#: src/tables/part/PartTable.tsx:283
+#: src/tables/part/PartTable.tsx:286
 msgid "Has Revisions"
 msgstr "有修訂"
 
-#: src/tables/part/PartTable.tsx:284
+#: src/tables/part/PartTable.tsx:287
 msgid "Filter by parts which have revisions"
 msgstr "按有修訂的零件篩選"
 
-#: src/tables/part/PartTable.tsx:289
+#: src/tables/part/PartTable.tsx:292
 msgid "Filter by parts which have pricing information"
 msgstr "按有定價信息的零件篩選"
 
-#: src/tables/part/PartTable.tsx:295
+#: src/tables/part/PartTable.tsx:298
 msgid "Filter by parts which have available stock"
 msgstr "按有可用庫存的零件篩選"
 
-#: src/tables/part/PartTable.tsx:301
+#: src/tables/part/PartTable.tsx:304
 msgid "Filter by parts to which the user is subscribed"
 msgstr "按用户訂閲的零件篩選"
 
-#: src/tables/part/PartTable.tsx:306
+#: src/tables/part/PartTable.tsx:309
 msgid "Has Stocktake"
 msgstr "有盤點"
 
-#: src/tables/part/PartTable.tsx:307
+#: src/tables/part/PartTable.tsx:310
 msgid "Filter by parts which have stocktake information"
 msgstr "按有盤點信息的零件篩選"
 
-#: src/tables/part/PartTable.tsx:356
+#: src/tables/part/PartTable.tsx:350
+#: src/tables/part/PartTable.tsx:367
+msgid "Set Category"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:369
+msgid "Set category for selected parts"
+msgstr ""
+
+#: src/tables/part/PartTable.tsx:379
 msgid "Order selected parts"
 msgstr ""
 
@@ -9027,7 +9127,6 @@ msgid "Show active variants"
 msgstr "顯示激活的變體"
 
 #: src/tables/part/PartVariantTable.tsx:20
-#: src/tables/settings/TemplateTable.tsx:435
 msgid "Template"
 msgstr "模板"
 
@@ -9090,7 +9189,7 @@ msgid "Plugin is not installed"
 msgstr "插件未安裝"
 
 #: src/tables/plugin/PluginListTable.tsx:77
-#: src/tables/settings/TemplateTable.tsx:451
+#: src/tables/settings/ExportSessionTable.tsx:29
 msgid "Plugin"
 msgstr "插件"
 
@@ -9438,37 +9537,45 @@ msgstr "接收選中項目"
 msgid "Receive Item"
 msgstr "接收物品"
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:74
+#: src/tables/sales/SalesOrderAllocationTable.tsx:78
 msgid "Show outstanding allocations"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:78
+#: src/tables/sales/SalesOrderAllocationTable.tsx:82
 msgid "Assigned to Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:79
+#: src/tables/sales/SalesOrderAllocationTable.tsx:83
 msgid "Show allocations assigned to a shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:172
-#: src/tables/sales/SalesOrderAllocationTable.tsx:186
+#: src/tables/sales/SalesOrderAllocationTable.tsx:176
+#: src/tables/sales/SalesOrderAllocationTable.tsx:190
 msgid "No shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:184
+#: src/tables/sales/SalesOrderAllocationTable.tsx:188
 msgid "Not shipped"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:206
-#: src/tables/sales/SalesOrderAllocationTable.tsx:228
+#: src/tables/sales/SalesOrderAllocationTable.tsx:210
+#: src/tables/sales/SalesOrderAllocationTable.tsx:232
 msgid "Edit Allocation"
 msgstr ""
 
-#: src/tables/sales/SalesOrderAllocationTable.tsx:213
-#: src/tables/sales/SalesOrderAllocationTable.tsx:236
+#: src/tables/sales/SalesOrderAllocationTable.tsx:217
+#: src/tables/sales/SalesOrderAllocationTable.tsx:240
 msgid "Delete Allocation"
 msgstr ""
 
+#: src/tables/sales/SalesOrderAllocationTable.tsx:264
+msgid "Assign to Shipment"
+msgstr ""
+
+#: src/tables/sales/SalesOrderAllocationTable.tsx:279
+msgid "Assign to shipment"
+msgstr ""
+
 #: src/tables/sales/SalesOrderLineItemTable.tsx:260
 msgid "Allocate Serial Numbers"
 msgstr "分配序列號"
@@ -9506,38 +9613,85 @@ msgstr "訂單庫存"
 #~ msgid "Delete Shipment"
 #~ msgstr "Delete Shipment"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:54
+#: src/tables/sales/SalesOrderShipmentTable.tsx:55
 msgid "Create Shipment"
 msgstr "創建配送"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:101
+#: src/tables/sales/SalesOrderShipmentTable.tsx:102
 msgid "Items"
 msgstr "項目"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:136
+#: src/tables/sales/SalesOrderShipmentTable.tsx:137
 msgid "View Shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:153
+#: src/tables/sales/SalesOrderShipmentTable.tsx:154
 msgid "Edit shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:161
+#: src/tables/sales/SalesOrderShipmentTable.tsx:162
 msgid "Cancel shipment"
 msgstr ""
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:176
+#: src/tables/sales/SalesOrderShipmentTable.tsx:177
 msgid "Add shipment"
 msgstr "添加配送"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:190
+#: src/tables/sales/SalesOrderShipmentTable.tsx:191
 msgid "Show shipments which have been shipped"
 msgstr "顯示已發貨的貨物"
 
-#: src/tables/sales/SalesOrderShipmentTable.tsx:195
+#: src/tables/sales/SalesOrderShipmentTable.tsx:196
 msgid "Show shipments which have been delivered"
 msgstr "顯示已送達的貨物"
 
+#: src/tables/settings/ApiTokenTable.tsx:28
+#: src/tables/settings/ApiTokenTable.tsx:42
+msgid "Generate Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:30
+msgid "Token generated"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:65
+#: src/tables/settings/ApiTokenTable.tsx:109
+msgid "Revoked"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:69
+#: src/tables/settings/ApiTokenTable.tsx:171
+msgid "Token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:76
+msgid "In Use"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:85
+msgid "Last Seen"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:90
+msgid "Expiry"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:110
+msgid "Show revoked tokens"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:129
+msgid "Revoke"
+msgstr "撤銷"
+
+#: src/tables/settings/ApiTokenTable.tsx:153
+msgid "Error revoking token"
+msgstr ""
+
+#: src/tables/settings/ApiTokenTable.tsx:175
+msgid "Tokens are only shown once - make sure to note it down."
+msgstr ""
+
 #: src/tables/settings/BarcodeScanHistoryTable.tsx:59
 msgid "Barcode Information"
 msgstr "條碼信息"
@@ -9659,6 +9813,14 @@ msgstr "錯誤報告已刪除"
 msgid "Error Details"
 msgstr "錯誤詳情"
 
+#: src/tables/settings/ExportSessionTable.tsx:24
+msgid "Output Type"
+msgstr ""
+
+#: src/tables/settings/ExportSessionTable.tsx:34
+msgid "Exported On"
+msgstr ""
+
 #: src/tables/settings/FailedTasksTable.tsx:32
 #: src/tables/settings/PendingTasksTable.tsx:23
 #: src/tables/settings/ScheduledTasksTable.tsx:19
@@ -9725,7 +9887,7 @@ msgid "Delete Import Session"
 msgstr "刪除導入的會話"
 
 #: src/tables/settings/ImportSessionTable.tsx:43
-#: src/tables/settings/ImportSessionTable.tsx:125
+#: src/tables/settings/ImportSessionTable.tsx:126
 msgid "Create Import Session"
 msgstr "創建導入會話"
 
@@ -9733,18 +9895,17 @@ msgstr "創建導入會話"
 msgid "Uploaded"
 msgstr "已上傳"
 
-#: src/tables/settings/ImportSessionTable.tsx:107
+#: src/tables/settings/ImportSessionTable.tsx:108
 #: src/tables/settings/TemplateTable.tsx:370
-#: src/tables/settings/TemplateTable.tsx:441
 msgid "Model Type"
 msgstr "型號類型"
 
-#: src/tables/settings/ImportSessionTable.tsx:108
+#: src/tables/settings/ImportSessionTable.tsx:109
 #: src/tables/settings/TemplateTable.tsx:371
 msgid "Filter by target model type"
 msgstr "按目標型號篩選"
 
-#: src/tables/settings/ImportSessionTable.tsx:114
+#: src/tables/settings/ImportSessionTable.tsx:115
 msgid "Filter by import session status"
 msgstr "按導入會話狀態篩選"
 
@@ -9846,8 +10007,8 @@ msgid "Filter by enabled status"
 msgstr "按啓用狀態篩選"
 
 #: src/tables/settings/TemplateTable.tsx:420
-msgid "Report Output"
-msgstr ""
+#~ msgid "Report Output"
+#~ msgstr "Report Output"
 
 #: src/tables/settings/UserTable.tsx:81
 msgid "User with id {id} not found"
@@ -10025,7 +10186,7 @@ msgid "Show items which are available"
 msgstr "顯示可用的項目"
 
 #: src/tables/stock/StockItemTable.tsx:332
-#: src/tables/stock/StockLocationTable.tsx:35
+#: src/tables/stock/StockLocationTable.tsx:38
 msgid "Include Sublocations"
 msgstr "包括子地點"
 
@@ -10315,39 +10476,47 @@ msgstr "只顯示通過的測試"
 msgid "Show results for enabled tests"
 msgstr ""
 
-#: src/tables/stock/StockLocationTable.tsx:36
-msgid "Include sublocations in results"
-msgstr "在結果中包含子地點"
-
 #: src/tables/stock/StockLocationTable.tsx:38
 #~ msgid "structural"
 #~ msgstr "structural"
 
-#: src/tables/stock/StockLocationTable.tsx:41
-msgid "Show structural locations"
-msgstr "顯示結構性地點"
+#: src/tables/stock/StockLocationTable.tsx:39
+msgid "Include sublocations in results"
+msgstr "在結果中包含子地點"
 
 #: src/tables/stock/StockLocationTable.tsx:43
 #~ msgid "external"
 #~ msgstr "external"
 
-#: src/tables/stock/StockLocationTable.tsx:46
+#: src/tables/stock/StockLocationTable.tsx:44
+msgid "Show structural locations"
+msgstr "顯示結構性地點"
+
+#: src/tables/stock/StockLocationTable.tsx:49
 msgid "Show external locations"
 msgstr "顯示外部地點"
 
-#: src/tables/stock/StockLocationTable.tsx:50
+#: src/tables/stock/StockLocationTable.tsx:53
 msgid "Has location type"
 msgstr "有位置類型"
 
-#: src/tables/stock/StockLocationTable.tsx:55
+#: src/tables/stock/StockLocationTable.tsx:58
 msgid "Filter by location type"
 msgstr "按位置類型篩選"
 
-#: src/tables/stock/StockLocationTable.tsx:100
-#: src/tables/stock/StockLocationTable.tsx:127
+#: src/tables/stock/StockLocationTable.tsx:103
+#: src/tables/stock/StockLocationTable.tsx:158
 msgid "Add Stock Location"
 msgstr "添加庫存地點"
 
+#: src/tables/stock/StockLocationTable.tsx:127
+msgid "Set Parent Location"
+msgstr ""
+
+#: src/tables/stock/StockLocationTable.tsx:147
+msgid "Set parent location for the selected items"
+msgstr ""
+
 #: src/tables/stock/StockTrackingTable.tsx:75
 msgid "Added"
 msgstr "已添加"