diff --git a/InvenTree/locale/es/LC_MESSAGES/django.po b/InvenTree/locale/es/LC_MESSAGES/django.po
index 602da976f2..7e03535b3c 100644
--- a/InvenTree/locale/es/LC_MESSAGES/django.po
+++ b/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: 2021-07-21 05:27+0000\n"
-"PO-Revision-Date: 2021-07-21 05:31\n"
+"POT-Creation-Date: 2021-07-21 11:51+0000\n"
+"PO-Revision-Date: 2021-07-21 11:56\n"
"Last-Translator: \n"
"Language-Team: Spanish\n"
"Language: es_ES\n"
@@ -36,7 +36,7 @@ msgstr "Ingrese la fecha"
#: InvenTree/forms.py:112 build/forms.py:102 build/forms.py:123
#: build/forms.py:145 build/forms.py:169 build/forms.py:185 build/forms.py:227
#: order/forms.py:30 order/forms.py:41 order/forms.py:52 order/forms.py:63
-#: order/forms.py:74 part/forms.py:109 templates/js/forms.js:520
+#: order/forms.py:74 part/forms.py:109 templates/js/forms.js:526
msgid "Confirm"
msgstr "Confirmar"
@@ -106,7 +106,7 @@ msgstr "Numeros de serie no encontrados"
msgid "Number of unique serial number ({s}) must match quantity ({q})"
msgstr ""
-#: InvenTree/models.py:61 stock/models.py:1804
+#: InvenTree/models.py:61 stock/models.py:1815
msgid "Attachment"
msgstr ""
@@ -122,7 +122,7 @@ msgstr "Comentario"
msgid "File comment"
msgstr ""
-#: InvenTree/models.py:70 InvenTree/models.py:71 part/models.py:2063
+#: InvenTree/models.py:70 InvenTree/models.py:71 part/models.py:2080
#: report/templates/report/inventree_test_report_base.html:91
#: templates/js/stock.js:1538
msgid "User"
@@ -132,12 +132,12 @@ msgstr "Usuario"
msgid "upload date"
msgstr ""
-#: InvenTree/models.py:102
+#: InvenTree/models.py:113
msgid "Invalid choice"
msgstr ""
-#: InvenTree/models.py:118 InvenTree/models.py:119 company/models.py:412
-#: label/models.py:112 part/models.py:701 part/models.py:2212
+#: InvenTree/models.py:129 InvenTree/models.py:130 company/models.py:412
+#: label/models.py:112 part/models.py:718 part/models.py:2229
#: report/models.py:181 templates/InvenTree/search.html:137
#: templates/InvenTree/search.html:289 templates/js/company.js:545
#: templates/js/part.js:206 templates/js/part.js:339 templates/js/part.js:831
@@ -145,12 +145,12 @@ msgstr ""
msgid "Name"
msgstr "Nombre"
-#: InvenTree/models.py:125 build/models.py:179
+#: InvenTree/models.py:136 build/models.py:187
#: build/templates/build/detail.html:24 company/models.py:351
#: company/models.py:519 company/templates/company/manufacturer_part.html:76
#: company/templates/company/supplier_part.html:75 label/models.py:119
#: order/models.py:158 order/templates/order/purchase_order_detail.html:312
-#: part/models.py:724 part/templates/part/set_category.html:14
+#: part/models.py:741 part/templates/part/set_category.html:14
#: report/models.py:194 report/models.py:551 report/models.py:590
#: report/templates/report/inventree_build_order_base.html:118
#: templates/InvenTree/search.html:144 templates/InvenTree/search.html:224
@@ -166,15 +166,15 @@ msgstr "Nombre"
msgid "Description"
msgstr "Descripción"
-#: InvenTree/models.py:126
+#: InvenTree/models.py:137
msgid "Description (optional)"
msgstr ""
-#: InvenTree/models.py:134
+#: InvenTree/models.py:145
msgid "parent"
msgstr ""
-#: InvenTree/serializers.py:52 part/models.py:2448
+#: InvenTree/serializers.py:52 part/models.py:2465
msgid "Must be a valid number"
msgstr ""
@@ -461,11 +461,11 @@ msgstr ""
msgid "Target Date"
msgstr ""
-#: build/forms.py:43 build/models.py:269
+#: build/forms.py:43 build/models.py:277
msgid "Target date for build completion. Build will be overdue after this date."
msgstr ""
-#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1394
+#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1402
#: build/templates/build/allocation_card.html:23
#: build/templates/build/auto_allocate.html:17
#: build/templates/build/build_base.html:133
@@ -479,7 +479,7 @@ msgstr ""
#: order/templates/order/sales_order_detail.html:207
#: order/templates/order/sales_order_detail.html:292
#: order/templates/order/sales_order_detail.html:364 part/forms.py:323
-#: part/forms.py:353 part/forms.py:369 part/forms.py:385 part/models.py:2350
+#: part/forms.py:353 part/forms.py:369 part/forms.py:385 part/models.py:2367
#: part/templates/part/bom_upload/match_parts.html:31
#: part/templates/part/detail.html:939 part/templates/part/detail.html:1025
#: part/templates/part/part_pricing.html:16
@@ -588,18 +588,18 @@ msgstr ""
msgid "Select quantity of stock to allocate"
msgstr ""
-#: build/models.py:105
+#: build/models.py:113
msgid "Invalid choice for parent build"
msgstr ""
-#: build/models.py:109 build/templates/build/build_base.html:9
+#: build/models.py:117 build/templates/build/build_base.html:9
#: build/templates/build/build_base.html:73
#: report/templates/report/inventree_build_order_base.html:106
#: templates/js/build.js:233
msgid "Build Order"
msgstr ""
-#: build/models.py:110 build/templates/build/index.html:8
+#: build/models.py:118 build/templates/build/index.html:8
#: build/templates/build/index.html:15
#: order/templates/order/sales_order_detail.html:34
#: order/templates/order/so_navbar.html:19
@@ -610,13 +610,13 @@ msgstr ""
msgid "Build Orders"
msgstr ""
-#: build/models.py:170
+#: build/models.py:178
msgid "Build Order Reference"
msgstr ""
-#: build/models.py:171 order/models.py:246 order/models.py:533
+#: build/models.py:179 order/models.py:246 order/models.py:533
#: order/models.py:713 order/templates/order/purchase_order_detail.html:343
-#: order/templates/order/sales_order_detail.html:359 part/models.py:2359
+#: order/templates/order/sales_order_detail.html:359 part/models.py:2376
#: part/templates/part/bom_upload/match_parts.html:30
#: report/templates/report/inventree_po_report.html:92
#: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197
@@ -624,30 +624,30 @@ msgstr ""
msgid "Reference"
msgstr "Referencia"
-#: build/models.py:182
+#: build/models.py:190
msgid "Brief description of the build"
msgstr ""
-#: build/models.py:191 build/templates/build/build_base.html:163
+#: build/models.py:199 build/templates/build/build_base.html:163
#: build/templates/build/detail.html:80
msgid "Parent Build"
msgstr ""
-#: build/models.py:192
+#: build/models.py:200
msgid "BuildOrder to which this build is allocated"
msgstr ""
-#: build/models.py:197 build/templates/build/auto_allocate.html:16
+#: build/models.py:205 build/templates/build/auto_allocate.html:16
#: build/templates/build/build_base.html:128
#: build/templates/build/detail.html:29 company/models.py:654
#: order/models.py:766 order/models.py:825
#: order/templates/order/order_wizard/select_parts.html:32
#: order/templates/order/purchase_order_detail.html:297
#: order/templates/order/receive_parts.html:19
-#: order/templates/order/sales_order_detail.html:344 part/models.py:346
-#: part/models.py:2008 part/models.py:2024 part/models.py:2043
-#: part/models.py:2061 part/models.py:2140 part/models.py:2244
-#: part/models.py:2334 part/templates/part/detail.html:199
+#: order/templates/order/sales_order_detail.html:344 part/models.py:347
+#: part/models.py:2025 part/models.py:2041 part/models.py:2060
+#: part/models.py:2078 part/models.py:2157 part/models.py:2261
+#: part/models.py:2351 part/templates/part/detail.html:199
#: part/templates/part/part_app_base.html:8
#: part/templates/part/part_pricing.html:12
#: part/templates/part/set_category.html:13
@@ -664,116 +664,116 @@ msgstr ""
msgid "Part"
msgstr "Parte"
-#: build/models.py:205
+#: build/models.py:213
msgid "Select part to build"
msgstr ""
-#: build/models.py:210
+#: build/models.py:218
msgid "Sales Order Reference"
msgstr ""
-#: build/models.py:214
+#: build/models.py:222
msgid "SalesOrder to which this build is allocated"
msgstr ""
-#: build/models.py:219
+#: build/models.py:227
msgid "Source Location"
msgstr ""
-#: build/models.py:223
+#: build/models.py:231
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr ""
-#: build/models.py:228
+#: build/models.py:236
msgid "Destination Location"
msgstr ""
-#: build/models.py:232
+#: build/models.py:240
msgid "Select location where the completed items will be stored"
msgstr ""
-#: build/models.py:236
+#: build/models.py:244
msgid "Build Quantity"
msgstr ""
-#: build/models.py:239
+#: build/models.py:247
msgid "Number of stock items to build"
msgstr ""
-#: build/models.py:243
+#: build/models.py:251
msgid "Completed items"
msgstr "Elementos completados"
-#: build/models.py:245
+#: build/models.py:253
msgid "Number of stock items which have been completed"
msgstr ""
-#: build/models.py:249 part/templates/part/part_base.html:225
+#: build/models.py:257 part/templates/part/part_base.html:225
msgid "Build Status"
msgstr ""
-#: build/models.py:253
+#: build/models.py:261
msgid "Build status code"
msgstr ""
-#: build/models.py:257 stock/models.py:496
+#: build/models.py:265 stock/models.py:507
msgid "Batch Code"
msgstr ""
-#: build/models.py:261
+#: build/models.py:269
msgid "Batch code for this build output"
msgstr ""
-#: build/models.py:264 order/models.py:162 part/models.py:896
+#: build/models.py:272 order/models.py:162 part/models.py:913
#: part/templates/part/part_base.html:143 templates/js/order.js:362
msgid "Creation Date"
msgstr ""
-#: build/models.py:268 order/models.py:555
+#: build/models.py:276 order/models.py:555
msgid "Target completion date"
msgstr ""
-#: build/models.py:272 order/models.py:288 templates/js/build.js:950
+#: build/models.py:280 order/models.py:288 templates/js/build.js:950
msgid "Completion Date"
msgstr ""
-#: build/models.py:278
+#: build/models.py:286
msgid "completed by"
msgstr ""
-#: build/models.py:286 templates/js/build.js:915
+#: build/models.py:294 templates/js/build.js:915
msgid "Issued by"
msgstr ""
-#: build/models.py:287
+#: build/models.py:295
msgid "User who issued this build order"
msgstr ""
-#: build/models.py:295 build/templates/build/build_base.html:184
+#: build/models.py:303 build/templates/build/build_base.html:184
#: build/templates/build/detail.html:108 order/models.py:176
#: order/templates/order/order_base.html:138
-#: order/templates/order/sales_order_base.html:140 part/models.py:900
+#: order/templates/order/sales_order_base.html:140 part/models.py:917
#: report/templates/report/inventree_build_order_base.html:159
msgid "Responsible"
msgstr "Responsable"
-#: build/models.py:296
+#: build/models.py:304
msgid "User responsible for this build order"
msgstr ""
-#: build/models.py:301 build/templates/build/detail.html:94
+#: build/models.py:309 build/templates/build/detail.html:94
#: company/templates/company/manufacturer_part.html:83
#: company/templates/company/supplier_part.html:82
-#: part/templates/part/part_base.html:137 stock/models.py:490
+#: part/templates/part/part_base.html:137 stock/models.py:501
#: stock/templates/stock/item_base.html:357
msgid "External Link"
msgstr ""
-#: build/models.py:302 part/models.py:758 stock/models.py:492
+#: build/models.py:310 part/models.py:775 stock/models.py:503
msgid "Link to external URL"
msgstr ""
-#: build/models.py:306 build/templates/build/navbar.html:52
+#: build/models.py:314 build/templates/build/navbar.html:52
#: company/models.py:139 company/models.py:526
#: company/templates/company/navbar.html:63
#: company/templates/company/navbar.html:66 order/models.py:180
@@ -782,12 +782,12 @@ msgstr ""
#: order/templates/order/purchase_order_detail.html:419
#: order/templates/order/sales_order_detail.html:439
#: order/templates/order/so_navbar.html:33
-#: order/templates/order/so_navbar.html:36 part/models.py:885
+#: order/templates/order/so_navbar.html:36 part/models.py:902
#: part/templates/part/detail.html:105 part/templates/part/navbar.html:108
#: part/templates/part/navbar.html:111
#: report/templates/report/inventree_build_order_base.html:173
-#: stock/forms.py:139 stock/forms.py:256 stock/forms.py:288 stock/models.py:562
-#: stock/models.py:1704 stock/models.py:1810
+#: stock/forms.py:139 stock/forms.py:256 stock/forms.py:288 stock/models.py:573
+#: stock/models.py:1715 stock/models.py:1821
#: stock/templates/stock/navbar.html:57 templates/js/barcode.js:37
#: templates/js/bom.js:349 templates/js/company.js:746
#: templates/js/stock.js:258 templates/js/stock.js:499
@@ -795,63 +795,63 @@ msgstr ""
msgid "Notes"
msgstr "Notas"
-#: build/models.py:307
+#: build/models.py:315
msgid "Extra build notes"
msgstr ""
-#: build/models.py:784
+#: build/models.py:792
msgid "No build output specified"
msgstr ""
-#: build/models.py:787
+#: build/models.py:795
msgid "Build output is already completed"
msgstr ""
-#: build/models.py:790
+#: build/models.py:798
msgid "Build output does not match Build Order"
msgstr ""
-#: build/models.py:1200
+#: build/models.py:1208
msgid "BuildItem must be unique for build, stock_item and install_into"
msgstr ""
-#: build/models.py:1225
+#: build/models.py:1233
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr ""
-#: build/models.py:1229
+#: build/models.py:1237
#, python-brace-format
msgid "Allocated quantity ({n}) must not exceed available quantity ({q})"
msgstr ""
-#: build/models.py:1236 order/models.py:926
+#: build/models.py:1244 order/models.py:926
msgid "StockItem is over-allocated"
msgstr ""
-#: build/models.py:1240 order/models.py:929
+#: build/models.py:1248 order/models.py:929
msgid "Allocation quantity must be greater than zero"
msgstr ""
-#: build/models.py:1244
+#: build/models.py:1252
msgid "Quantity must be 1 for serialized stock"
msgstr ""
-#: build/models.py:1304
+#: build/models.py:1312
#, python-brace-format
msgid "Selected stock item not found in BOM for part '{p}'"
msgstr ""
-#: build/models.py:1364 stock/templates/stock/item_base.html:329
+#: build/models.py:1372 stock/templates/stock/item_base.html:329
#: templates/InvenTree/search.html:183 templates/js/build.js:846
#: templates/navbar.html:29
msgid "Build"
msgstr ""
-#: build/models.py:1365
+#: build/models.py:1373
msgid "Build to allocate parts"
msgstr ""
-#: build/models.py:1381 stock/templates/stock/item_base.html:8
+#: build/models.py:1389 stock/templates/stock/item_base.html:8
#: stock/templates/stock/item_base.html:31
#: stock/templates/stock/item_base.html:351
#: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:244
@@ -861,19 +861,19 @@ msgstr ""
msgid "Stock Item"
msgstr ""
-#: build/models.py:1382
+#: build/models.py:1390
msgid "Source stock item"
msgstr ""
-#: build/models.py:1395
+#: build/models.py:1403
msgid "Stock quantity to allocate to build"
msgstr ""
-#: build/models.py:1403
+#: build/models.py:1411
msgid "Install into"
msgstr ""
-#: build/models.py:1404
+#: build/models.py:1412
msgid "Destination stock item"
msgstr ""
@@ -882,7 +882,7 @@ msgstr ""
#: order/templates/order/sales_order_detail.html:205
#: order/templates/order/sales_order_detail.html:290
#: report/templates/report/inventree_test_report_base.html:75
-#: stock/models.py:484 stock/templates/stock/item_base.html:249
+#: stock/models.py:495 stock/templates/stock/item_base.html:249
#: templates/js/build.js:604 templates/js/model_renderers.js:54
msgid "Serial Number"
msgstr "Número de serie"
@@ -1609,7 +1609,7 @@ msgstr ""
msgid "Number of recent parts to display on index page"
msgstr ""
-#: common/models.py:158 part/models.py:2246 report/models.py:187
+#: common/models.py:158 part/models.py:2263 report/models.py:187
#: stock/forms.py:225 templates/js/table_filters.js:25
#: templates/js/table_filters.js:324
msgid "Template"
@@ -1619,7 +1619,7 @@ msgstr ""
msgid "Parts are templates by default"
msgstr ""
-#: common/models.py:165 part/models.py:848 templates/js/table_filters.js:132
+#: common/models.py:165 part/models.py:865 templates/js/table_filters.js:132
#: templates/js/table_filters.js:336
msgid "Assembly"
msgstr ""
@@ -1628,7 +1628,7 @@ msgstr ""
msgid "Parts can be assembled from other components by default"
msgstr ""
-#: common/models.py:172 part/models.py:854 templates/js/table_filters.js:340
+#: common/models.py:172 part/models.py:871 templates/js/table_filters.js:340
msgid "Component"
msgstr ""
@@ -1636,7 +1636,7 @@ msgstr ""
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/models.py:179 part/models.py:865
+#: common/models.py:179 part/models.py:882
msgid "Purchaseable"
msgstr ""
@@ -1644,7 +1644,7 @@ msgstr ""
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/models.py:186 part/models.py:870 templates/js/table_filters.js:348
+#: common/models.py:186 part/models.py:887 templates/js/table_filters.js:348
msgid "Salable"
msgstr ""
@@ -1652,7 +1652,7 @@ msgstr ""
msgid "Parts are salable by default"
msgstr ""
-#: common/models.py:193 part/models.py:860 templates/js/table_filters.js:33
+#: common/models.py:193 part/models.py:877 templates/js/table_filters.js:33
#: templates/js/table_filters.js:352
msgid "Trackable"
msgstr ""
@@ -1661,7 +1661,7 @@ msgstr ""
msgid "Parts are trackable by default"
msgstr ""
-#: common/models.py:200 part/models.py:880 templates/js/table_filters.js:29
+#: common/models.py:200 part/models.py:897 templates/js/table_filters.js:29
msgid "Virtual"
msgstr ""
@@ -2006,7 +2006,7 @@ msgid "Point of contact"
msgstr ""
#: company/models.py:128 company/models.py:345 company/models.py:513
-#: order/models.py:160 part/models.py:757
+#: order/models.py:160 part/models.py:774
#: report/templates/report/inventree_build_order_base.html:165
#: templates/js/company.js:448 templates/js/company.js:730
#: templates/js/part.js:687
@@ -2017,7 +2017,7 @@ msgstr ""
msgid "Link to external company information"
msgstr ""
-#: company/models.py:136 part/models.py:767
+#: company/models.py:136 part/models.py:784
msgid "Image"
msgstr ""
@@ -2054,7 +2054,7 @@ msgstr ""
msgid "Default currency used for this company"
msgstr ""
-#: company/models.py:317 company/models.py:484 stock/models.py:437
+#: company/models.py:317 company/models.py:484 stock/models.py:448
#: stock/templates/stock/item_base.html:235
msgid "Base Part"
msgstr ""
@@ -2108,7 +2108,7 @@ msgstr ""
#: company/models.py:419
#: report/templates/report/inventree_test_report_base.html:90
-#: stock/models.py:1797 templates/InvenTree/settings/header.html:8
+#: stock/models.py:1808 templates/InvenTree/settings/header.html:8
#: templates/js/company.js:551 templates/js/part.js:348
#: templates/js/stock.js:495
msgid "Value"
@@ -2118,7 +2118,7 @@ msgstr ""
msgid "Parameter value"
msgstr ""
-#: company/models.py:426 part/models.py:842 part/models.py:2214
+#: company/models.py:426 part/models.py:859 part/models.py:2231
#: templates/js/company.js:557 templates/js/part.js:354
msgid "Units"
msgstr ""
@@ -2164,21 +2164,21 @@ msgid "Supplier part description"
msgstr ""
#: company/models.py:525 company/templates/company/supplier_part.html:120
-#: part/models.py:2362 report/templates/report/inventree_po_report.html:93
+#: part/models.py:2379 report/templates/report/inventree_po_report.html:93
#: report/templates/report/inventree_so_report.html:93
msgid "Note"
msgstr "Nota"
-#: company/models.py:529 part/models.py:1635
+#: company/models.py:529 part/models.py:1652
msgid "base cost"
msgstr ""
-#: company/models.py:529 part/models.py:1635
+#: company/models.py:529 part/models.py:1652
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
#: company/models.py:531 company/templates/company/supplier_part.html:113
-#: stock/models.py:461 stock/templates/stock/item_base.html:322
+#: stock/models.py:472 stock/templates/stock/item_base.html:322
#: templates/js/company.js:751 templates/js/stock.js:1078
msgid "Packaging"
msgstr ""
@@ -2187,7 +2187,7 @@ msgstr ""
msgid "Part packaging"
msgstr ""
-#: company/models.py:533 part/models.py:1637
+#: company/models.py:533 part/models.py:1654
msgid "multiple"
msgstr ""
@@ -2245,8 +2245,8 @@ msgid "Phone"
msgstr "Teléfono"
#: company/templates/company/company_base.html:126 order/models.py:544
-#: order/templates/order/sales_order_base.html:94 stock/models.py:479
-#: stock/models.py:480 stock/templates/stock/item_base.html:274
+#: order/templates/order/sales_order_base.html:94 stock/models.py:490
+#: stock/models.py:491 stock/templates/stock/item_base.html:274
#: templates/js/company.js:245 templates/js/order.js:331
#: templates/js/stock.js:1456
msgid "Customer"
@@ -2519,7 +2519,7 @@ msgid "Stock Items"
msgstr ""
#: company/templates/company/supplier_part.html:7
-#: company/templates/company/supplier_part.html:24 stock/models.py:446
+#: company/templates/company/supplier_part.html:24 stock/models.py:457
#: stock/templates/stock/item_base.html:386 templates/js/company.js:691
#: templates/js/stock.js:1050
msgid "Supplier Part"
@@ -2801,7 +2801,7 @@ msgstr ""
msgid "Date order was completed"
msgstr ""
-#: order/models.py:313 stock/models.py:334 stock/models.py:1049
+#: order/models.py:313 stock/models.py:345 stock/models.py:1060
msgid "Quantity must be greater than zero"
msgstr ""
@@ -2888,7 +2888,7 @@ msgstr ""
msgid "Number of items received"
msgstr ""
-#: order/models.py:776 part/templates/part/prices.html:157 stock/models.py:571
+#: order/models.py:776 part/templates/part/prices.html:157 stock/models.py:582
#: stock/templates/stock/item_base.html:343 templates/js/stock.js:1073
msgid "Purchase Price"
msgstr ""
@@ -3267,7 +3267,7 @@ msgid "Receive outstanding parts for %(order)s - %(desc)s"
msgstr ""
#: order/templates/order/receive_parts.html:14 part/api.py:47
-#: part/models.py:347 part/templates/part/cat_link.html:7
+#: part/models.py:348 part/templates/part/cat_link.html:7
#: part/templates/part/category.html:108 part/templates/part/category.html:122
#: part/templates/part/category_navbar.html:21
#: part/templates/part/category_navbar.html:24
@@ -3587,7 +3587,7 @@ msgstr ""
msgid "Updated {part} unit-price to {price} and quantity to {qty}"
msgstr ""
-#: part/bom.py:133 part/models.py:73 part/models.py:776
+#: part/bom.py:133 part/models.py:74 part/models.py:793
#: part/templates/part/category.html:75
msgid "Default Location"
msgstr ""
@@ -3652,7 +3652,7 @@ msgstr ""
msgid "Include part supplier data in exported BOM"
msgstr ""
-#: part/forms.py:97 part/models.py:2244
+#: part/forms.py:97 part/models.py:2261
msgid "Parent Part"
msgstr ""
@@ -3728,7 +3728,7 @@ msgstr ""
msgid "Add parameter template to all categories"
msgstr ""
-#: part/forms.py:325 part/models.py:2343
+#: part/forms.py:325 part/models.py:2360
msgid "Sub part"
msgstr ""
@@ -3736,370 +3736,374 @@ msgstr ""
msgid "Input quantity for price calculation"
msgstr ""
-#: part/models.py:74
+#: part/models.py:75
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:77
+#: part/models.py:78
msgid "Default keywords"
msgstr ""
-#: part/models.py:77
+#: part/models.py:78
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:87 part/models.py:2290
+#: part/models.py:88 part/models.py:2307
#: part/templates/part/part_app_base.html:10
msgid "Part Category"
msgstr ""
-#: part/models.py:88 part/templates/part/category.html:32
+#: part/models.py:89 part/templates/part/category.html:32
#: part/templates/part/category.html:103 templates/InvenTree/search.html:127
#: templates/stats.html:84 users/models.py:40
msgid "Part Categories"
msgstr ""
-#: part/models.py:478 part/models.py:490
+#: part/models.py:433
+msgid "Invalid choice for parent part"
+msgstr ""
+
+#: part/models.py:495 part/models.py:507
#, python-brace-format
msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)"
msgstr ""
-#: part/models.py:587
+#: part/models.py:604
msgid "Next available serial numbers are"
msgstr ""
-#: part/models.py:591
+#: part/models.py:608
msgid "Next available serial number is"
msgstr ""
-#: part/models.py:596
+#: part/models.py:613
msgid "Most recent serial number is"
msgstr ""
-#: part/models.py:675
+#: part/models.py:692
msgid "Duplicate IPN not allowed in part settings"
msgstr ""
-#: part/models.py:700
+#: part/models.py:717
msgid "Part name"
msgstr ""
-#: part/models.py:707
+#: part/models.py:724
msgid "Is Template"
msgstr ""
-#: part/models.py:708
+#: part/models.py:725
msgid "Is this part a template part?"
msgstr ""
-#: part/models.py:718
+#: part/models.py:735
msgid "Is this part a variant of another part?"
msgstr ""
-#: part/models.py:719
+#: part/models.py:736
msgid "Variant Of"
msgstr ""
-#: part/models.py:725
+#: part/models.py:742
msgid "Part description"
msgstr ""
-#: part/models.py:730 part/templates/part/category.html:82
+#: part/models.py:747 part/templates/part/category.html:82
#: part/templates/part/part_base.html:130
msgid "Keywords"
msgstr ""
-#: part/models.py:731
+#: part/models.py:748
msgid "Part keywords to improve visibility in search results"
msgstr ""
-#: part/models.py:738 part/models.py:2289
+#: part/models.py:755 part/models.py:2306
#: part/templates/part/set_category.html:15 templates/js/part.js:641
msgid "Category"
msgstr ""
-#: part/models.py:739
+#: part/models.py:756
msgid "Part category"
msgstr ""
-#: part/models.py:744 templates/js/part.js:257 templates/js/part.js:485
+#: part/models.py:761 templates/js/part.js:257 templates/js/part.js:485
msgid "IPN"
msgstr ""
-#: part/models.py:745
+#: part/models.py:762
msgid "Internal Part Number"
msgstr ""
-#: part/models.py:751
+#: part/models.py:768
msgid "Part revision or version number"
msgstr ""
-#: part/models.py:752 report/models.py:200 templates/js/part.js:261
+#: part/models.py:769 report/models.py:200 templates/js/part.js:261
msgid "Revision"
msgstr ""
-#: part/models.py:774
+#: part/models.py:791
msgid "Where is this item normally stored?"
msgstr ""
-#: part/models.py:821
+#: part/models.py:838
msgid "Default Supplier"
msgstr ""
-#: part/models.py:822
+#: part/models.py:839
msgid "Default supplier part"
msgstr ""
-#: part/models.py:829
+#: part/models.py:846
msgid "Default Expiry"
msgstr ""
-#: part/models.py:830
+#: part/models.py:847
msgid "Expiry time (in days) for stock items of this part"
msgstr ""
-#: part/models.py:835
+#: part/models.py:852
msgid "Minimum Stock"
msgstr ""
-#: part/models.py:836
+#: part/models.py:853
msgid "Minimum allowed stock level"
msgstr ""
-#: part/models.py:843
+#: part/models.py:860
msgid "Stock keeping units for this part"
msgstr ""
-#: part/models.py:849
+#: part/models.py:866
msgid "Can this part be built from other parts?"
msgstr ""
-#: part/models.py:855
+#: part/models.py:872
msgid "Can this part be used to build other parts?"
msgstr ""
-#: part/models.py:861
+#: part/models.py:878
msgid "Does this part have tracking for unique items?"
msgstr ""
-#: part/models.py:866
+#: part/models.py:883
msgid "Can this part be purchased from external suppliers?"
msgstr ""
-#: part/models.py:871
+#: part/models.py:888
msgid "Can this part be sold to customers?"
msgstr ""
-#: part/models.py:875 templates/js/table_filters.js:21
+#: part/models.py:892 templates/js/table_filters.js:21
#: templates/js/table_filters.js:69 templates/js/table_filters.js:250
#: templates/js/table_filters.js:319
msgid "Active"
msgstr ""
-#: part/models.py:876
+#: part/models.py:893
msgid "Is this part active?"
msgstr ""
-#: part/models.py:881
+#: part/models.py:898
msgid "Is this a virtual part, such as a software product or license?"
msgstr ""
-#: part/models.py:886
+#: part/models.py:903
msgid "Part notes - supports Markdown formatting"
msgstr ""
-#: part/models.py:889
+#: part/models.py:906
msgid "BOM checksum"
msgstr ""
-#: part/models.py:889
+#: part/models.py:906
msgid "Stored BOM checksum"
msgstr ""
-#: part/models.py:892
+#: part/models.py:909
msgid "BOM checked by"
msgstr ""
-#: part/models.py:894
+#: part/models.py:911
msgid "BOM checked date"
msgstr ""
-#: part/models.py:898
+#: part/models.py:915
msgid "Creation User"
msgstr ""
-#: part/models.py:1637
+#: part/models.py:1654
msgid "Sell multiple"
msgstr ""
-#: part/models.py:2108
+#: part/models.py:2125
msgid "Test templates can only be created for trackable parts"
msgstr ""
-#: part/models.py:2125
+#: part/models.py:2142
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2145 templates/js/part.js:906 templates/js/stock.js:475
+#: part/models.py:2162 templates/js/part.js:906 templates/js/stock.js:475
msgid "Test Name"
msgstr ""
-#: part/models.py:2146
+#: part/models.py:2163
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:2151
+#: part/models.py:2168
msgid "Test Description"
msgstr ""
-#: part/models.py:2152
+#: part/models.py:2169
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2157 templates/js/part.js:915
+#: part/models.py:2174 templates/js/part.js:915
#: templates/js/table_filters.js:236
msgid "Required"
msgstr ""
-#: part/models.py:2158
+#: part/models.py:2175
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2163 templates/js/part.js:923
+#: part/models.py:2180 templates/js/part.js:923
msgid "Requires Value"
msgstr ""
-#: part/models.py:2164
+#: part/models.py:2181
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2169 templates/js/part.js:930
+#: part/models.py:2186 templates/js/part.js:930
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:2170
+#: part/models.py:2187
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:2207
+#: part/models.py:2224
msgid "Parameter template name must be unique"
msgstr ""
-#: part/models.py:2212
+#: part/models.py:2229
msgid "Parameter Name"
msgstr ""
-#: part/models.py:2214
+#: part/models.py:2231
msgid "Parameter Units"
msgstr ""
-#: part/models.py:2246 part/models.py:2295 part/models.py:2296
+#: part/models.py:2263 part/models.py:2312 part/models.py:2313
#: templates/InvenTree/settings/category.html:62
msgid "Parameter Template"
msgstr ""
-#: part/models.py:2248
+#: part/models.py:2265
msgid "Data"
msgstr ""
-#: part/models.py:2248
+#: part/models.py:2265
msgid "Parameter Value"
msgstr ""
-#: part/models.py:2300 templates/InvenTree/settings/category.html:67
+#: part/models.py:2317 templates/InvenTree/settings/category.html:67
msgid "Default Value"
msgstr ""
-#: part/models.py:2301
+#: part/models.py:2318
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:2335
+#: part/models.py:2352
msgid "Select parent part"
msgstr ""
-#: part/models.py:2344
+#: part/models.py:2361
msgid "Select part to be used in BOM"
msgstr ""
-#: part/models.py:2350
+#: part/models.py:2367
msgid "BOM quantity for this BOM item"
msgstr ""
-#: part/models.py:2352 templates/js/bom.js:216 templates/js/bom.js:278
+#: part/models.py:2369 templates/js/bom.js:216 templates/js/bom.js:278
msgid "Optional"
msgstr ""
-#: part/models.py:2352
+#: part/models.py:2369
msgid "This BOM item is optional"
msgstr ""
-#: part/models.py:2355
+#: part/models.py:2372
msgid "Overage"
msgstr ""
-#: part/models.py:2356
+#: part/models.py:2373
msgid "Estimated build wastage quantity (absolute or percentage)"
msgstr ""
-#: part/models.py:2359
+#: part/models.py:2376
msgid "BOM item reference"
msgstr ""
-#: part/models.py:2362
+#: part/models.py:2379
msgid "BOM item notes"
msgstr ""
-#: part/models.py:2364
+#: part/models.py:2381
msgid "Checksum"
msgstr ""
-#: part/models.py:2364
+#: part/models.py:2381
msgid "BOM line checksum"
msgstr ""
-#: part/models.py:2368 templates/js/bom.js:295 templates/js/bom.js:302
+#: part/models.py:2385 templates/js/bom.js:295 templates/js/bom.js:302
#: templates/js/table_filters.js:55
msgid "Inherited"
msgstr ""
-#: part/models.py:2369
+#: part/models.py:2386
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr ""
-#: part/models.py:2374 templates/js/bom.js:287
+#: part/models.py:2391 templates/js/bom.js:287
msgid "Allow Variants"
msgstr ""
-#: part/models.py:2375
+#: part/models.py:2392
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:2460 stock/models.py:324
+#: part/models.py:2477 stock/models.py:335
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:2469 part/models.py:2471
+#: part/models.py:2486 part/models.py:2488
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:2474
+#: part/models.py:2491
msgid "BOM Item"
msgstr ""
-#: part/models.py:2593
+#: part/models.py:2610
msgid "Part 1"
msgstr ""
-#: part/models.py:2597
+#: part/models.py:2614
msgid "Part 2"
msgstr ""
-#: part/models.py:2597
+#: part/models.py:2614
msgid "Select Related Part"
msgstr ""
-#: part/models.py:2629
+#: part/models.py:2646
msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique"
msgstr ""
@@ -5088,12 +5092,12 @@ msgid "Test Results"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:88
-#: stock/models.py:1785
+#: stock/models.py:1796
msgid "Test"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:89
-#: stock/models.py:1791
+#: stock/models.py:1802
msgid "Result"
msgstr ""
@@ -5152,7 +5156,7 @@ msgstr ""
msgid "Moved {n} parts to {loc}"
msgstr ""
-#: stock/forms.py:80 stock/forms.py:313 stock/models.py:539
+#: stock/forms.py:80 stock/forms.py:313 stock/models.py:550
#: stock/templates/stock/item_base.html:393 templates/js/stock.js:1018
msgid "Expiry Date"
msgstr ""
@@ -5209,187 +5213,187 @@ msgstr ""
msgid "Confirm removal of installed stock items"
msgstr ""
-#: stock/models.py:57 stock/models.py:576
+#: stock/models.py:57 stock/models.py:587
msgid "Owner"
msgstr ""
-#: stock/models.py:58 stock/models.py:577
+#: stock/models.py:58 stock/models.py:588
msgid "Select Owner"
msgstr ""
-#: stock/models.py:305
+#: stock/models.py:316
msgid "StockItem with this serial number already exists"
msgstr ""
-#: stock/models.py:341
+#: stock/models.py:352
#, python-brace-format
msgid "Part type ('{pf}') must be {pe}"
msgstr ""
-#: stock/models.py:351 stock/models.py:360
+#: stock/models.py:362 stock/models.py:371
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:352
+#: stock/models.py:363
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:374
+#: stock/models.py:385
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:380
+#: stock/models.py:391
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:387
+#: stock/models.py:398
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:429
+#: stock/models.py:440
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:438
+#: stock/models.py:449
msgid "Base part"
msgstr ""
-#: stock/models.py:447
+#: stock/models.py:458
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:452 stock/templates/stock/stock_app_base.html:8
+#: stock/models.py:463 stock/templates/stock/stock_app_base.html:8
msgid "Stock Location"
msgstr ""
-#: stock/models.py:455
+#: stock/models.py:466
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:462
+#: stock/models.py:473
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:467 stock/templates/stock/item_base.html:282
+#: stock/models.py:478 stock/templates/stock/item_base.html:282
msgid "Installed In"
msgstr ""
-#: stock/models.py:470
+#: stock/models.py:481
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:486
+#: stock/models.py:497
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:498
+#: stock/models.py:509
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:502
+#: stock/models.py:513
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:511
+#: stock/models.py:522
msgid "Source Build"
msgstr ""
-#: stock/models.py:513
+#: stock/models.py:524
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:524
+#: stock/models.py:535
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:527
+#: stock/models.py:538
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:533
+#: stock/models.py:544
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:540
+#: stock/models.py:551
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:553
+#: stock/models.py:564
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:553
+#: stock/models.py:564
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:563 stock/templates/stock/item.html:98
+#: stock/models.py:574 stock/templates/stock/item.html:98
#: stock/templates/stock/navbar.html:54
msgid "Stock Item Notes"
msgstr ""
-#: stock/models.py:572
+#: stock/models.py:583
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1040
+#: stock/models.py:1051
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1046
+#: stock/models.py:1057
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1052
+#: stock/models.py:1063
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({n})"
msgstr ""
-#: stock/models.py:1055
+#: stock/models.py:1066
msgid "Serial numbers must be a list of integers"
msgstr ""
-#: stock/models.py:1058
+#: stock/models.py:1069
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1065
+#: stock/models.py:1076
#, python-brace-format
msgid "Serial numbers already exist: {exists}"
msgstr ""
-#: stock/models.py:1223
+#: stock/models.py:1234
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:1705
+#: stock/models.py:1716
msgid "Entry notes"
msgstr ""
-#: stock/models.py:1762
+#: stock/models.py:1773
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:1768
+#: stock/models.py:1779
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:1786
+#: stock/models.py:1797
msgid "Test name"
msgstr ""
-#: stock/models.py:1792 templates/js/table_filters.js:226
+#: stock/models.py:1803 templates/js/table_filters.js:226
msgid "Test result"
msgstr ""
-#: stock/models.py:1798
+#: stock/models.py:1809
msgid "Test output value"
msgstr ""
-#: stock/models.py:1805
+#: stock/models.py:1816
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:1811
+#: stock/models.py:1822
msgid "Test notes"
msgstr ""
@@ -6681,15 +6685,15 @@ msgstr ""
msgid "View operation not allowed"
msgstr ""
-#: templates/js/forms.js:811 templates/modals.html:21 templates/modals.html:47
+#: templates/js/forms.js:817 templates/modals.html:21 templates/modals.html:47
msgid "Form errors exist"
msgstr ""
-#: templates/js/forms.js:1178
+#: templates/js/forms.js:1184
msgid "Searching"
msgstr ""
-#: templates/js/forms.js:1331
+#: templates/js/forms.js:1337
msgid "Clear input"
msgstr ""