diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po
index d5b9be1f60..c521432db4 100644
--- a/InvenTree/locale/de/LC_MESSAGES/django.po
+++ b/InvenTree/locale/de/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-29 09:06+0000\n"
+"POT-Creation-Date: 2021-05-29 21:51+0000\n"
"PO-Revision-Date: 2021-05-28 04:02\n"
"Last-Translator: \n"
"Language-Team: German\n"
@@ -136,7 +136,7 @@ msgstr "Hochladedatum"
#: part/models.py:686 part/models.py:2140 part/templates/part/params.html:27
#: report/models.py:179 templates/InvenTree/search.html:137
#: templates/InvenTree/search.html:289 templates/js/part.js:110
-#: templates/js/part.js:553 templates/js/stock.js:944
+#: templates/js/part.js:623 templates/js/stock.js:944
msgid "Name"
msgstr "Name"
@@ -157,7 +157,7 @@ msgstr "Name"
#: templates/js/build.js:736 templates/js/build.js:1004
#: templates/js/company.js:56 templates/js/order.js:183
#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252
-#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643
+#: templates/js/part.js:429 templates/js/part.js:635 templates/js/part.js:713
#: templates/js/stock.js:554 templates/js/stock.js:956
#: templates/js/stock.js:1001
msgid "Description"
@@ -487,7 +487,7 @@ msgstr "Zieldatum für Bauauftrag-Fertigstellung."
#: stock/templates/stock/item_base.html:255
#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364
#: templates/js/bom.js:205 templates/js/build.js:476 templates/js/build.js:1014
-#: templates/js/part.js:717 templates/js/stock.js:1136
+#: templates/js/part.js:787 templates/js/stock.js:1136
#: templates/js/stock.js:1398
msgid "Quantity"
msgstr "Anzahl"
@@ -644,7 +644,7 @@ msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist"
#: templates/js/barcode.js:362 templates/js/bom.js:163
#: templates/js/build.js:741 templates/js/build.js:981
#: templates/js/company.js:140 templates/js/company.js:238
-#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523
+#: templates/js/part.js:233 templates/js/part.js:396 templates/js/stock.js:523
#: templates/js/stock.js:1470
msgid "Part"
msgstr "Teil"
@@ -1876,7 +1876,7 @@ msgstr "URL"
msgid "Image URL"
msgstr "Bild-URL"
-#: company/forms.py:118 templates/js/part.js:708
+#: company/forms.py:118 templates/js/part.js:778
msgid "Single Price"
msgstr "Einzelpreis"
@@ -1955,7 +1955,7 @@ msgstr "Anlaufstelle"
#: order/models.py:103 part/models.py:743
#: report/templates/report/inventree_build_order_base.html:165
#: templates/js/company.js:188 templates/js/company.js:318
-#: templates/js/part.js:431
+#: templates/js/part.js:489
msgid "Link"
msgstr "Link"
@@ -2340,7 +2340,8 @@ msgstr "Herstellerteil-Bestand"
#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196
#: templates/InvenTree/search.html:232
#: templates/InvenTree/settings/tabs.html:31 templates/js/part.js:173
-#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26
+#: templates/js/part.js:297 templates/js/part.js:456 templates/js/stock.js:563
+#: templates/navbar.html:26
msgid "Stock"
msgstr "Lagerbestand"
@@ -2977,7 +2978,7 @@ msgstr "Aufgegeben"
#: order/templates/order/order_base.html:180
#: order/templates/order/purchase_order_detail.html:100
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: part/templates/part/category.html:208 part/templates/part/category.html:250
#: stock/templates/stock/location.html:191 templates/js/stock.js:708
#: templates/js/stock.js:1296
msgid "New Location"
@@ -3193,12 +3194,12 @@ msgstr "Ausstehende Teile für %(order)s - %(desc)s empfangen"
#: order/templates/order/receive_parts.html:14 part/api.py:45
#: part/models.py:322 part/templates/part/cat_link.html:7
-#: part/templates/part/category.html:99 part/templates/part/category.html:141
+#: part/templates/part/category.html:99 part/templates/part/category.html:148
#: part/templates/part/category_navbar.html:22
#: part/templates/part/category_navbar.html:29
#: part/templates/part/category_partlist.html:10
#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
-#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:577
+#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:647
#: templates/navbar.html:23 templates/stats.html:80 templates/stats.html:89
#: users/models.py:40
msgid "Parts"
@@ -3213,7 +3214,7 @@ msgid "Order Code"
msgstr "Bestellnummer"
#: order/templates/order/receive_parts.html:21
-#: part/templates/part/part_base.html:136 templates/js/part.js:414
+#: part/templates/part/part_base.html:136 templates/js/part.js:472
msgid "On Order"
msgstr "Bestellt"
@@ -3795,7 +3796,7 @@ msgid "Part keywords to improve visibility in search results"
msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern"
#: part/models.py:724 part/models.py:2213 part/templates/part/detail.html:73
-#: part/templates/part/set_category.html:15 templates/js/part.js:385
+#: part/templates/part/set_category.html:15 templates/js/part.js:443
msgid "Category"
msgstr "Kategorie"
@@ -3805,6 +3806,7 @@ msgstr "Teile-Kategorie"
#: part/models.py:730 part/templates/part/detail.html:28
#: part/templates/part/part_base.html:87 templates/js/part.js:161
+#: templates/js/part.js:288
msgid "IPN"
msgstr "IPN (Interne Produktnummer)"
@@ -3928,7 +3930,7 @@ msgstr "Test-Vorlagen können nur für verfolgbare Teile angelegt werden"
msgid "Test with this name already exists for this part"
msgstr "Ein Test mit diesem Namen besteht bereits für dieses Teil"
-#: part/models.py:2077 templates/js/part.js:638 templates/js/stock.js:104
+#: part/models.py:2077 templates/js/part.js:708 templates/js/stock.js:104
msgid "Test Name"
msgstr "Test-Name"
@@ -3944,7 +3946,7 @@ msgstr "Test-Beschreibung"
msgid "Enter description for this test"
msgstr "Beschreibung für diesen Test eingeben"
-#: part/models.py:2089 templates/js/part.js:647
+#: part/models.py:2089 templates/js/part.js:717
#: templates/js/table_filters.js:223
msgid "Required"
msgstr "Benötigt"
@@ -3953,7 +3955,7 @@ msgstr "Benötigt"
msgid "Is this test required to pass?"
msgstr "Muss dieser Test erfolgreich sein?"
-#: part/models.py:2095 templates/js/part.js:655
+#: part/models.py:2095 templates/js/part.js:725
msgid "Requires Value"
msgstr "Erfordert Wert"
@@ -3961,7 +3963,7 @@ msgstr "Erfordert Wert"
msgid "Does this test require a value when adding a test result?"
msgstr "Muss für diesen Test ein Wert für das Test-Ergebnis eingetragen werden?"
-#: part/models.py:2101 templates/js/part.js:662
+#: part/models.py:2101 templates/js/part.js:732
msgid "Requires Attachment"
msgstr "Anhang muss eingegeben werden"
@@ -4297,24 +4299,32 @@ msgstr "Teil-Kategorie auswählen"
msgid "Export Data"
msgstr "Exportieren"
-#: part/templates/part/category.html:186
+#: part/templates/part/category.html:132
+msgid "View list display"
+msgstr ""
+
+#: part/templates/part/category.html:135
+msgid "View grid display"
+msgstr ""
+
+#: part/templates/part/category.html:209
#: stock/templates/stock/location.html:192 templates/js/stock.js:709
msgid "Create new location"
msgstr "Neuen Lagerort anlegen"
-#: part/templates/part/category.html:191 part/templates/part/category.html:221
+#: part/templates/part/category.html:214 part/templates/part/category.html:244
msgid "New Category"
msgstr "Neue Kategorie"
-#: part/templates/part/category.html:192
+#: part/templates/part/category.html:215
msgid "Create new category"
msgstr "Teil-Kategorie anlegen"
-#: part/templates/part/category.html:222
+#: part/templates/part/category.html:245
msgid "Create new Part Category"
msgstr "Neue Teil-Kategorie anlegen"
-#: part/templates/part/category.html:228 stock/views.py:1391
+#: part/templates/part/category.html:251 stock/views.py:1391
msgid "Create new Stock Location"
msgstr "Neuen Lagerort erstellen"
@@ -4730,7 +4740,8 @@ msgstr "Zu Bauaufträgen zugeordnet"
msgid "Can Build"
msgstr "Herstellbar"
-#: part/templates/part/part_base.html:178 templates/js/part.js:418
+#: part/templates/part/part_base.html:178 templates/js/part.js:304
+#: templates/js/part.js:476
msgid "Building"
msgstr "Im Bau"
@@ -4806,7 +4817,7 @@ msgid "Showing stock for all variants of %(full_name)s"
msgstr "Lagerbestand aller Varianten von %(full_name)s"
#: part/templates/part/stock_count.html:7 templates/js/bom.js:239
-#: templates/js/part.js:422
+#: templates/js/part.js:294 templates/js/part.js:480
msgid "No Stock"
msgstr "Kein Bestand"
@@ -6588,7 +6599,7 @@ msgstr "Bestand bestellen"
msgid "No builds matching query"
msgstr "Keine Bauaufträge passen zur Anfrage"
-#: templates/js/build.js:708 templates/js/part.js:324 templates/js/part.js:546
+#: templates/js/build.js:708 templates/js/part.js:382 templates/js/part.js:616
#: templates/js/stock.js:511 templates/js/stock.js:938
#: templates/js/stock.js:1458
msgid "Select"
@@ -6813,47 +6824,47 @@ msgstr "Verkäufliches Teil"
msgid "No variants found"
msgstr "Keine Varianten gefunden"
-#: templates/js/part.js:272 templates/js/part.js:452
+#: templates/js/part.js:272 templates/js/part.js:510
msgid "No parts found"
msgstr "Keine Teile gefunden"
-#: templates/js/part.js:391
+#: templates/js/part.js:449
msgid "No category"
msgstr "Keine Kategorie"
-#: templates/js/part.js:409 templates/js/table_filters.js:319
+#: templates/js/part.js:467 templates/js/table_filters.js:319
msgid "Low stock"
msgstr "Bestand niedrig"
-#: templates/js/part.js:571 templates/js/stock.js:962
+#: templates/js/part.js:641 templates/js/stock.js:962
msgid "Path"
msgstr "Pfad"
-#: templates/js/part.js:588
+#: templates/js/part.js:658
msgid "YES"
msgstr "JA"
-#: templates/js/part.js:590
+#: templates/js/part.js:660
msgid "NO"
msgstr "NEIN"
-#: templates/js/part.js:624
+#: templates/js/part.js:694
msgid "No test templates matching query"
msgstr "Keine zur Anfrage passenden Testvorlagen"
-#: templates/js/part.js:675 templates/js/stock.js:75
+#: templates/js/part.js:745 templates/js/stock.js:75
msgid "Edit test result"
msgstr "Testergebnis bearbeiten"
-#: templates/js/part.js:676 templates/js/stock.js:76
+#: templates/js/part.js:746 templates/js/stock.js:76
msgid "Delete test result"
msgstr "Testergebnis löschen"
-#: templates/js/part.js:682
+#: templates/js/part.js:752
msgid "This test is defined for a parent part"
msgstr "Dieses Testergebnis ist für ein Hauptteil"
-#: templates/js/part.js:727
+#: templates/js/part.js:797
#, fuzzy
#| msgid "Single Price"
msgid "Single Price Difference"
diff --git a/InvenTree/locale/en/LC_MESSAGES/django.po b/InvenTree/locale/en/LC_MESSAGES/django.po
index 4184bd51b4..96c03cbb17 100644
--- a/InvenTree/locale/en/LC_MESSAGES/django.po
+++ b/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: 2021-05-29 09:06+0000\n"
+"POT-Creation-Date: 2021-05-29 21:51+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -137,7 +137,7 @@ msgstr ""
#: part/models.py:686 part/models.py:2140 part/templates/part/params.html:27
#: report/models.py:179 templates/InvenTree/search.html:137
#: templates/InvenTree/search.html:289 templates/js/part.js:110
-#: templates/js/part.js:553 templates/js/stock.js:944
+#: templates/js/part.js:623 templates/js/stock.js:944
msgid "Name"
msgstr ""
@@ -158,7 +158,7 @@ msgstr ""
#: templates/js/build.js:736 templates/js/build.js:1004
#: templates/js/company.js:56 templates/js/order.js:183
#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252
-#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643
+#: templates/js/part.js:429 templates/js/part.js:635 templates/js/part.js:713
#: templates/js/stock.js:554 templates/js/stock.js:956
#: templates/js/stock.js:1001
msgid "Description"
@@ -488,7 +488,7 @@ msgstr ""
#: stock/templates/stock/item_base.html:255
#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364
#: templates/js/bom.js:205 templates/js/build.js:476 templates/js/build.js:1014
-#: templates/js/part.js:717 templates/js/stock.js:1136
+#: templates/js/part.js:787 templates/js/stock.js:1136
#: templates/js/stock.js:1398
msgid "Quantity"
msgstr ""
@@ -645,7 +645,7 @@ msgstr ""
#: templates/js/barcode.js:362 templates/js/bom.js:163
#: templates/js/build.js:741 templates/js/build.js:981
#: templates/js/company.js:140 templates/js/company.js:238
-#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523
+#: templates/js/part.js:233 templates/js/part.js:396 templates/js/stock.js:523
#: templates/js/stock.js:1470
msgid "Part"
msgstr ""
@@ -1877,7 +1877,7 @@ msgstr ""
msgid "Image URL"
msgstr ""
-#: company/forms.py:118 templates/js/part.js:708
+#: company/forms.py:118 templates/js/part.js:778
msgid "Single Price"
msgstr ""
@@ -1956,7 +1956,7 @@ msgstr ""
#: order/models.py:103 part/models.py:743
#: report/templates/report/inventree_build_order_base.html:165
#: templates/js/company.js:188 templates/js/company.js:318
-#: templates/js/part.js:431
+#: templates/js/part.js:489
msgid "Link"
msgstr ""
@@ -2339,7 +2339,8 @@ msgstr ""
#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196
#: templates/InvenTree/search.html:232
#: templates/InvenTree/settings/tabs.html:31 templates/js/part.js:173
-#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26
+#: templates/js/part.js:297 templates/js/part.js:456 templates/js/stock.js:563
+#: templates/navbar.html:26
msgid "Stock"
msgstr ""
@@ -2976,7 +2977,7 @@ msgstr ""
#: order/templates/order/order_base.html:180
#: order/templates/order/purchase_order_detail.html:100
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: part/templates/part/category.html:208 part/templates/part/category.html:250
#: stock/templates/stock/location.html:191 templates/js/stock.js:708
#: templates/js/stock.js:1296
msgid "New Location"
@@ -3192,12 +3193,12 @@ msgstr ""
#: order/templates/order/receive_parts.html:14 part/api.py:45
#: part/models.py:322 part/templates/part/cat_link.html:7
-#: part/templates/part/category.html:99 part/templates/part/category.html:141
+#: part/templates/part/category.html:99 part/templates/part/category.html:148
#: part/templates/part/category_navbar.html:22
#: part/templates/part/category_navbar.html:29
#: part/templates/part/category_partlist.html:10
#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
-#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:577
+#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:647
#: templates/navbar.html:23 templates/stats.html:80 templates/stats.html:89
#: users/models.py:40
msgid "Parts"
@@ -3212,7 +3213,7 @@ msgid "Order Code"
msgstr ""
#: order/templates/order/receive_parts.html:21
-#: part/templates/part/part_base.html:136 templates/js/part.js:414
+#: part/templates/part/part_base.html:136 templates/js/part.js:472
msgid "On Order"
msgstr ""
@@ -3794,7 +3795,7 @@ msgid "Part keywords to improve visibility in search results"
msgstr ""
#: part/models.py:724 part/models.py:2213 part/templates/part/detail.html:73
-#: part/templates/part/set_category.html:15 templates/js/part.js:385
+#: part/templates/part/set_category.html:15 templates/js/part.js:443
msgid "Category"
msgstr ""
@@ -3804,6 +3805,7 @@ msgstr ""
#: part/models.py:730 part/templates/part/detail.html:28
#: part/templates/part/part_base.html:87 templates/js/part.js:161
+#: templates/js/part.js:288
msgid "IPN"
msgstr ""
@@ -3927,7 +3929,7 @@ msgstr ""
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2077 templates/js/part.js:638 templates/js/stock.js:104
+#: part/models.py:2077 templates/js/part.js:708 templates/js/stock.js:104
msgid "Test Name"
msgstr ""
@@ -3943,7 +3945,7 @@ msgstr ""
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2089 templates/js/part.js:647
+#: part/models.py:2089 templates/js/part.js:717
#: templates/js/table_filters.js:223
msgid "Required"
msgstr ""
@@ -3952,7 +3954,7 @@ msgstr ""
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2095 templates/js/part.js:655
+#: part/models.py:2095 templates/js/part.js:725
msgid "Requires Value"
msgstr ""
@@ -3960,7 +3962,7 @@ msgstr ""
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2101 templates/js/part.js:662
+#: part/models.py:2101 templates/js/part.js:732
msgid "Requires Attachment"
msgstr ""
@@ -4296,24 +4298,32 @@ msgstr ""
msgid "Export Data"
msgstr ""
-#: part/templates/part/category.html:186
+#: part/templates/part/category.html:132
+msgid "View list display"
+msgstr ""
+
+#: part/templates/part/category.html:135
+msgid "View grid display"
+msgstr ""
+
+#: part/templates/part/category.html:209
#: stock/templates/stock/location.html:192 templates/js/stock.js:709
msgid "Create new location"
msgstr ""
-#: part/templates/part/category.html:191 part/templates/part/category.html:221
+#: part/templates/part/category.html:214 part/templates/part/category.html:244
msgid "New Category"
msgstr ""
-#: part/templates/part/category.html:192
+#: part/templates/part/category.html:215
msgid "Create new category"
msgstr ""
-#: part/templates/part/category.html:222
+#: part/templates/part/category.html:245
msgid "Create new Part Category"
msgstr ""
-#: part/templates/part/category.html:228 stock/views.py:1391
+#: part/templates/part/category.html:251 stock/views.py:1391
msgid "Create new Stock Location"
msgstr ""
@@ -4718,7 +4728,8 @@ msgstr ""
msgid "Can Build"
msgstr ""
-#: part/templates/part/part_base.html:178 templates/js/part.js:418
+#: part/templates/part/part_base.html:178 templates/js/part.js:304
+#: templates/js/part.js:476
msgid "Building"
msgstr ""
@@ -4794,7 +4805,7 @@ msgid "Showing stock for all variants of %(full_name)s"
msgstr ""
#: part/templates/part/stock_count.html:7 templates/js/bom.js:239
-#: templates/js/part.js:422
+#: templates/js/part.js:294 templates/js/part.js:480
msgid "No Stock"
msgstr ""
@@ -6572,7 +6583,7 @@ msgstr ""
msgid "No builds matching query"
msgstr ""
-#: templates/js/build.js:708 templates/js/part.js:324 templates/js/part.js:546
+#: templates/js/build.js:708 templates/js/part.js:382 templates/js/part.js:616
#: templates/js/stock.js:511 templates/js/stock.js:938
#: templates/js/stock.js:1458
msgid "Select"
@@ -6797,47 +6808,47 @@ msgstr ""
msgid "No variants found"
msgstr ""
-#: templates/js/part.js:272 templates/js/part.js:452
+#: templates/js/part.js:272 templates/js/part.js:510
msgid "No parts found"
msgstr ""
-#: templates/js/part.js:391
+#: templates/js/part.js:449
msgid "No category"
msgstr ""
-#: templates/js/part.js:409 templates/js/table_filters.js:319
+#: templates/js/part.js:467 templates/js/table_filters.js:319
msgid "Low stock"
msgstr ""
-#: templates/js/part.js:571 templates/js/stock.js:962
+#: templates/js/part.js:641 templates/js/stock.js:962
msgid "Path"
msgstr ""
-#: templates/js/part.js:588
+#: templates/js/part.js:658
msgid "YES"
msgstr ""
-#: templates/js/part.js:590
+#: templates/js/part.js:660
msgid "NO"
msgstr ""
-#: templates/js/part.js:624
+#: templates/js/part.js:694
msgid "No test templates matching query"
msgstr ""
-#: templates/js/part.js:675 templates/js/stock.js:75
+#: templates/js/part.js:745 templates/js/stock.js:75
msgid "Edit test result"
msgstr ""
-#: templates/js/part.js:676 templates/js/stock.js:76
+#: templates/js/part.js:746 templates/js/stock.js:76
msgid "Delete test result"
msgstr ""
-#: templates/js/part.js:682
+#: templates/js/part.js:752
msgid "This test is defined for a parent part"
msgstr ""
-#: templates/js/part.js:727
+#: templates/js/part.js:797
msgid "Single Price Difference"
msgstr ""
diff --git a/InvenTree/locale/es/LC_MESSAGES/django.po b/InvenTree/locale/es/LC_MESSAGES/django.po
index d99561804d..907a0b0157 100644
--- a/InvenTree/locale/es/LC_MESSAGES/django.po
+++ b/InvenTree/locale/es/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-29 09:06+0000\n"
+"POT-Creation-Date: 2021-05-29 21:51+0000\n"
"PO-Revision-Date: 2021-05-28 04:02\n"
"Last-Translator: \n"
"Language-Team: Spanish\n"
@@ -136,7 +136,7 @@ msgstr ""
#: part/models.py:686 part/models.py:2140 part/templates/part/params.html:27
#: report/models.py:179 templates/InvenTree/search.html:137
#: templates/InvenTree/search.html:289 templates/js/part.js:110
-#: templates/js/part.js:553 templates/js/stock.js:944
+#: templates/js/part.js:623 templates/js/stock.js:944
msgid "Name"
msgstr "Nombre"
@@ -157,7 +157,7 @@ msgstr "Nombre"
#: templates/js/build.js:736 templates/js/build.js:1004
#: templates/js/company.js:56 templates/js/order.js:183
#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252
-#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643
+#: templates/js/part.js:429 templates/js/part.js:635 templates/js/part.js:713
#: templates/js/stock.js:554 templates/js/stock.js:956
#: templates/js/stock.js:1001
msgid "Description"
@@ -487,7 +487,7 @@ msgstr ""
#: stock/templates/stock/item_base.html:255
#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364
#: templates/js/bom.js:205 templates/js/build.js:476 templates/js/build.js:1014
-#: templates/js/part.js:717 templates/js/stock.js:1136
+#: templates/js/part.js:787 templates/js/stock.js:1136
#: templates/js/stock.js:1398
msgid "Quantity"
msgstr "Cantidad"
@@ -644,7 +644,7 @@ msgstr ""
#: templates/js/barcode.js:362 templates/js/bom.js:163
#: templates/js/build.js:741 templates/js/build.js:981
#: templates/js/company.js:140 templates/js/company.js:238
-#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523
+#: templates/js/part.js:233 templates/js/part.js:396 templates/js/stock.js:523
#: templates/js/stock.js:1470
msgid "Part"
msgstr "Parte"
@@ -1876,7 +1876,7 @@ msgstr ""
msgid "Image URL"
msgstr ""
-#: company/forms.py:118 templates/js/part.js:708
+#: company/forms.py:118 templates/js/part.js:778
msgid "Single Price"
msgstr ""
@@ -1955,7 +1955,7 @@ msgstr ""
#: order/models.py:103 part/models.py:743
#: report/templates/report/inventree_build_order_base.html:165
#: templates/js/company.js:188 templates/js/company.js:318
-#: templates/js/part.js:431
+#: templates/js/part.js:489
msgid "Link"
msgstr ""
@@ -2338,7 +2338,8 @@ msgstr ""
#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196
#: templates/InvenTree/search.html:232
#: templates/InvenTree/settings/tabs.html:31 templates/js/part.js:173
-#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26
+#: templates/js/part.js:297 templates/js/part.js:456 templates/js/stock.js:563
+#: templates/navbar.html:26
msgid "Stock"
msgstr ""
@@ -2975,7 +2976,7 @@ msgstr ""
#: order/templates/order/order_base.html:180
#: order/templates/order/purchase_order_detail.html:100
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: part/templates/part/category.html:208 part/templates/part/category.html:250
#: stock/templates/stock/location.html:191 templates/js/stock.js:708
#: templates/js/stock.js:1296
msgid "New Location"
@@ -3191,12 +3192,12 @@ msgstr ""
#: order/templates/order/receive_parts.html:14 part/api.py:45
#: part/models.py:322 part/templates/part/cat_link.html:7
-#: part/templates/part/category.html:99 part/templates/part/category.html:141
+#: part/templates/part/category.html:99 part/templates/part/category.html:148
#: part/templates/part/category_navbar.html:22
#: part/templates/part/category_navbar.html:29
#: part/templates/part/category_partlist.html:10
#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
-#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:577
+#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:647
#: templates/navbar.html:23 templates/stats.html:80 templates/stats.html:89
#: users/models.py:40
msgid "Parts"
@@ -3211,7 +3212,7 @@ msgid "Order Code"
msgstr ""
#: order/templates/order/receive_parts.html:21
-#: part/templates/part/part_base.html:136 templates/js/part.js:414
+#: part/templates/part/part_base.html:136 templates/js/part.js:472
msgid "On Order"
msgstr ""
@@ -3793,7 +3794,7 @@ msgid "Part keywords to improve visibility in search results"
msgstr ""
#: part/models.py:724 part/models.py:2213 part/templates/part/detail.html:73
-#: part/templates/part/set_category.html:15 templates/js/part.js:385
+#: part/templates/part/set_category.html:15 templates/js/part.js:443
msgid "Category"
msgstr ""
@@ -3803,6 +3804,7 @@ msgstr ""
#: part/models.py:730 part/templates/part/detail.html:28
#: part/templates/part/part_base.html:87 templates/js/part.js:161
+#: templates/js/part.js:288
msgid "IPN"
msgstr ""
@@ -3926,7 +3928,7 @@ msgstr ""
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2077 templates/js/part.js:638 templates/js/stock.js:104
+#: part/models.py:2077 templates/js/part.js:708 templates/js/stock.js:104
msgid "Test Name"
msgstr ""
@@ -3942,7 +3944,7 @@ msgstr ""
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2089 templates/js/part.js:647
+#: part/models.py:2089 templates/js/part.js:717
#: templates/js/table_filters.js:223
msgid "Required"
msgstr ""
@@ -3951,7 +3953,7 @@ msgstr ""
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2095 templates/js/part.js:655
+#: part/models.py:2095 templates/js/part.js:725
msgid "Requires Value"
msgstr ""
@@ -3959,7 +3961,7 @@ msgstr ""
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2101 templates/js/part.js:662
+#: part/models.py:2101 templates/js/part.js:732
msgid "Requires Attachment"
msgstr ""
@@ -4295,24 +4297,32 @@ msgstr ""
msgid "Export Data"
msgstr ""
-#: part/templates/part/category.html:186
+#: part/templates/part/category.html:132
+msgid "View list display"
+msgstr ""
+
+#: part/templates/part/category.html:135
+msgid "View grid display"
+msgstr ""
+
+#: part/templates/part/category.html:209
#: stock/templates/stock/location.html:192 templates/js/stock.js:709
msgid "Create new location"
msgstr ""
-#: part/templates/part/category.html:191 part/templates/part/category.html:221
+#: part/templates/part/category.html:214 part/templates/part/category.html:244
msgid "New Category"
msgstr ""
-#: part/templates/part/category.html:192
+#: part/templates/part/category.html:215
msgid "Create new category"
msgstr ""
-#: part/templates/part/category.html:222
+#: part/templates/part/category.html:245
msgid "Create new Part Category"
msgstr ""
-#: part/templates/part/category.html:228 stock/views.py:1391
+#: part/templates/part/category.html:251 stock/views.py:1391
msgid "Create new Stock Location"
msgstr ""
@@ -4719,7 +4729,8 @@ msgstr ""
msgid "Can Build"
msgstr ""
-#: part/templates/part/part_base.html:178 templates/js/part.js:418
+#: part/templates/part/part_base.html:178 templates/js/part.js:304
+#: templates/js/part.js:476
msgid "Building"
msgstr ""
@@ -4795,7 +4806,7 @@ msgid "Showing stock for all variants of %(full_name)s"
msgstr ""
#: part/templates/part/stock_count.html:7 templates/js/bom.js:239
-#: templates/js/part.js:422
+#: templates/js/part.js:294 templates/js/part.js:480
msgid "No Stock"
msgstr ""
@@ -6573,7 +6584,7 @@ msgstr ""
msgid "No builds matching query"
msgstr ""
-#: templates/js/build.js:708 templates/js/part.js:324 templates/js/part.js:546
+#: templates/js/build.js:708 templates/js/part.js:382 templates/js/part.js:616
#: templates/js/stock.js:511 templates/js/stock.js:938
#: templates/js/stock.js:1458
msgid "Select"
@@ -6798,47 +6809,47 @@ msgstr ""
msgid "No variants found"
msgstr ""
-#: templates/js/part.js:272 templates/js/part.js:452
+#: templates/js/part.js:272 templates/js/part.js:510
msgid "No parts found"
msgstr ""
-#: templates/js/part.js:391
+#: templates/js/part.js:449
msgid "No category"
msgstr ""
-#: templates/js/part.js:409 templates/js/table_filters.js:319
+#: templates/js/part.js:467 templates/js/table_filters.js:319
msgid "Low stock"
msgstr ""
-#: templates/js/part.js:571 templates/js/stock.js:962
+#: templates/js/part.js:641 templates/js/stock.js:962
msgid "Path"
msgstr ""
-#: templates/js/part.js:588
+#: templates/js/part.js:658
msgid "YES"
msgstr ""
-#: templates/js/part.js:590
+#: templates/js/part.js:660
msgid "NO"
msgstr ""
-#: templates/js/part.js:624
+#: templates/js/part.js:694
msgid "No test templates matching query"
msgstr ""
-#: templates/js/part.js:675 templates/js/stock.js:75
+#: templates/js/part.js:745 templates/js/stock.js:75
msgid "Edit test result"
msgstr ""
-#: templates/js/part.js:676 templates/js/stock.js:76
+#: templates/js/part.js:746 templates/js/stock.js:76
msgid "Delete test result"
msgstr ""
-#: templates/js/part.js:682
+#: templates/js/part.js:752
msgid "This test is defined for a parent part"
msgstr ""
-#: templates/js/part.js:727
+#: templates/js/part.js:797
msgid "Single Price Difference"
msgstr ""
diff --git a/InvenTree/locale/fr/LC_MESSAGES/django.po b/InvenTree/locale/fr/LC_MESSAGES/django.po
index 88d1fd5bfc..337c1cdb06 100644
--- a/InvenTree/locale/fr/LC_MESSAGES/django.po
+++ b/InvenTree/locale/fr/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-29 09:06+0000\n"
+"POT-Creation-Date: 2021-05-29 21:51+0000\n"
"PO-Revision-Date: 2021-05-28 04:02\n"
"Last-Translator: \n"
"Language-Team: French\n"
@@ -136,7 +136,7 @@ msgstr ""
#: part/models.py:686 part/models.py:2140 part/templates/part/params.html:27
#: report/models.py:179 templates/InvenTree/search.html:137
#: templates/InvenTree/search.html:289 templates/js/part.js:110
-#: templates/js/part.js:553 templates/js/stock.js:944
+#: templates/js/part.js:623 templates/js/stock.js:944
msgid "Name"
msgstr ""
@@ -157,7 +157,7 @@ msgstr ""
#: templates/js/build.js:736 templates/js/build.js:1004
#: templates/js/company.js:56 templates/js/order.js:183
#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252
-#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643
+#: templates/js/part.js:429 templates/js/part.js:635 templates/js/part.js:713
#: templates/js/stock.js:554 templates/js/stock.js:956
#: templates/js/stock.js:1001
msgid "Description"
@@ -487,7 +487,7 @@ msgstr ""
#: stock/templates/stock/item_base.html:255
#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364
#: templates/js/bom.js:205 templates/js/build.js:476 templates/js/build.js:1014
-#: templates/js/part.js:717 templates/js/stock.js:1136
+#: templates/js/part.js:787 templates/js/stock.js:1136
#: templates/js/stock.js:1398
msgid "Quantity"
msgstr ""
@@ -644,7 +644,7 @@ msgstr ""
#: templates/js/barcode.js:362 templates/js/bom.js:163
#: templates/js/build.js:741 templates/js/build.js:981
#: templates/js/company.js:140 templates/js/company.js:238
-#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523
+#: templates/js/part.js:233 templates/js/part.js:396 templates/js/stock.js:523
#: templates/js/stock.js:1470
msgid "Part"
msgstr ""
@@ -1876,7 +1876,7 @@ msgstr ""
msgid "Image URL"
msgstr ""
-#: company/forms.py:118 templates/js/part.js:708
+#: company/forms.py:118 templates/js/part.js:778
msgid "Single Price"
msgstr ""
@@ -1955,7 +1955,7 @@ msgstr ""
#: order/models.py:103 part/models.py:743
#: report/templates/report/inventree_build_order_base.html:165
#: templates/js/company.js:188 templates/js/company.js:318
-#: templates/js/part.js:431
+#: templates/js/part.js:489
msgid "Link"
msgstr ""
@@ -2338,7 +2338,8 @@ msgstr ""
#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196
#: templates/InvenTree/search.html:232
#: templates/InvenTree/settings/tabs.html:31 templates/js/part.js:173
-#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26
+#: templates/js/part.js:297 templates/js/part.js:456 templates/js/stock.js:563
+#: templates/navbar.html:26
msgid "Stock"
msgstr ""
@@ -2975,7 +2976,7 @@ msgstr ""
#: order/templates/order/order_base.html:180
#: order/templates/order/purchase_order_detail.html:100
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: part/templates/part/category.html:208 part/templates/part/category.html:250
#: stock/templates/stock/location.html:191 templates/js/stock.js:708
#: templates/js/stock.js:1296
msgid "New Location"
@@ -3191,12 +3192,12 @@ msgstr ""
#: order/templates/order/receive_parts.html:14 part/api.py:45
#: part/models.py:322 part/templates/part/cat_link.html:7
-#: part/templates/part/category.html:99 part/templates/part/category.html:141
+#: part/templates/part/category.html:99 part/templates/part/category.html:148
#: part/templates/part/category_navbar.html:22
#: part/templates/part/category_navbar.html:29
#: part/templates/part/category_partlist.html:10
#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
-#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:577
+#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:647
#: templates/navbar.html:23 templates/stats.html:80 templates/stats.html:89
#: users/models.py:40
msgid "Parts"
@@ -3211,7 +3212,7 @@ msgid "Order Code"
msgstr ""
#: order/templates/order/receive_parts.html:21
-#: part/templates/part/part_base.html:136 templates/js/part.js:414
+#: part/templates/part/part_base.html:136 templates/js/part.js:472
msgid "On Order"
msgstr ""
@@ -3793,7 +3794,7 @@ msgid "Part keywords to improve visibility in search results"
msgstr ""
#: part/models.py:724 part/models.py:2213 part/templates/part/detail.html:73
-#: part/templates/part/set_category.html:15 templates/js/part.js:385
+#: part/templates/part/set_category.html:15 templates/js/part.js:443
msgid "Category"
msgstr ""
@@ -3803,6 +3804,7 @@ msgstr ""
#: part/models.py:730 part/templates/part/detail.html:28
#: part/templates/part/part_base.html:87 templates/js/part.js:161
+#: templates/js/part.js:288
msgid "IPN"
msgstr ""
@@ -3926,7 +3928,7 @@ msgstr ""
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2077 templates/js/part.js:638 templates/js/stock.js:104
+#: part/models.py:2077 templates/js/part.js:708 templates/js/stock.js:104
msgid "Test Name"
msgstr ""
@@ -3942,7 +3944,7 @@ msgstr ""
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2089 templates/js/part.js:647
+#: part/models.py:2089 templates/js/part.js:717
#: templates/js/table_filters.js:223
msgid "Required"
msgstr ""
@@ -3951,7 +3953,7 @@ msgstr ""
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2095 templates/js/part.js:655
+#: part/models.py:2095 templates/js/part.js:725
msgid "Requires Value"
msgstr ""
@@ -3959,7 +3961,7 @@ msgstr ""
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2101 templates/js/part.js:662
+#: part/models.py:2101 templates/js/part.js:732
msgid "Requires Attachment"
msgstr ""
@@ -4295,24 +4297,32 @@ msgstr ""
msgid "Export Data"
msgstr ""
-#: part/templates/part/category.html:186
+#: part/templates/part/category.html:132
+msgid "View list display"
+msgstr ""
+
+#: part/templates/part/category.html:135
+msgid "View grid display"
+msgstr ""
+
+#: part/templates/part/category.html:209
#: stock/templates/stock/location.html:192 templates/js/stock.js:709
msgid "Create new location"
msgstr ""
-#: part/templates/part/category.html:191 part/templates/part/category.html:221
+#: part/templates/part/category.html:214 part/templates/part/category.html:244
msgid "New Category"
msgstr ""
-#: part/templates/part/category.html:192
+#: part/templates/part/category.html:215
msgid "Create new category"
msgstr ""
-#: part/templates/part/category.html:222
+#: part/templates/part/category.html:245
msgid "Create new Part Category"
msgstr ""
-#: part/templates/part/category.html:228 stock/views.py:1391
+#: part/templates/part/category.html:251 stock/views.py:1391
msgid "Create new Stock Location"
msgstr ""
@@ -4717,7 +4727,8 @@ msgstr ""
msgid "Can Build"
msgstr ""
-#: part/templates/part/part_base.html:178 templates/js/part.js:418
+#: part/templates/part/part_base.html:178 templates/js/part.js:304
+#: templates/js/part.js:476
msgid "Building"
msgstr ""
@@ -4793,7 +4804,7 @@ msgid "Showing stock for all variants of %(full_name)s"
msgstr ""
#: part/templates/part/stock_count.html:7 templates/js/bom.js:239
-#: templates/js/part.js:422
+#: templates/js/part.js:294 templates/js/part.js:480
msgid "No Stock"
msgstr ""
@@ -6571,7 +6582,7 @@ msgstr ""
msgid "No builds matching query"
msgstr ""
-#: templates/js/build.js:708 templates/js/part.js:324 templates/js/part.js:546
+#: templates/js/build.js:708 templates/js/part.js:382 templates/js/part.js:616
#: templates/js/stock.js:511 templates/js/stock.js:938
#: templates/js/stock.js:1458
msgid "Select"
@@ -6796,47 +6807,47 @@ msgstr ""
msgid "No variants found"
msgstr ""
-#: templates/js/part.js:272 templates/js/part.js:452
+#: templates/js/part.js:272 templates/js/part.js:510
msgid "No parts found"
msgstr ""
-#: templates/js/part.js:391
+#: templates/js/part.js:449
msgid "No category"
msgstr ""
-#: templates/js/part.js:409 templates/js/table_filters.js:319
+#: templates/js/part.js:467 templates/js/table_filters.js:319
msgid "Low stock"
msgstr ""
-#: templates/js/part.js:571 templates/js/stock.js:962
+#: templates/js/part.js:641 templates/js/stock.js:962
msgid "Path"
msgstr ""
-#: templates/js/part.js:588
+#: templates/js/part.js:658
msgid "YES"
msgstr ""
-#: templates/js/part.js:590
+#: templates/js/part.js:660
msgid "NO"
msgstr ""
-#: templates/js/part.js:624
+#: templates/js/part.js:694
msgid "No test templates matching query"
msgstr ""
-#: templates/js/part.js:675 templates/js/stock.js:75
+#: templates/js/part.js:745 templates/js/stock.js:75
msgid "Edit test result"
msgstr ""
-#: templates/js/part.js:676 templates/js/stock.js:76
+#: templates/js/part.js:746 templates/js/stock.js:76
msgid "Delete test result"
msgstr ""
-#: templates/js/part.js:682
+#: templates/js/part.js:752
msgid "This test is defined for a parent part"
msgstr ""
-#: templates/js/part.js:727
+#: templates/js/part.js:797
msgid "Single Price Difference"
msgstr ""
diff --git a/InvenTree/locale/it/LC_MESSAGES/django.po b/InvenTree/locale/it/LC_MESSAGES/django.po
index d31a35f3cc..db293f87d5 100644
--- a/InvenTree/locale/it/LC_MESSAGES/django.po
+++ b/InvenTree/locale/it/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-29 09:06+0000\n"
+"POT-Creation-Date: 2021-05-29 21:51+0000\n"
"PO-Revision-Date: 2021-05-28 04:02\n"
"Last-Translator: \n"
"Language-Team: Italian\n"
@@ -136,7 +136,7 @@ msgstr ""
#: part/models.py:686 part/models.py:2140 part/templates/part/params.html:27
#: report/models.py:179 templates/InvenTree/search.html:137
#: templates/InvenTree/search.html:289 templates/js/part.js:110
-#: templates/js/part.js:553 templates/js/stock.js:944
+#: templates/js/part.js:623 templates/js/stock.js:944
msgid "Name"
msgstr ""
@@ -157,7 +157,7 @@ msgstr ""
#: templates/js/build.js:736 templates/js/build.js:1004
#: templates/js/company.js:56 templates/js/order.js:183
#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252
-#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643
+#: templates/js/part.js:429 templates/js/part.js:635 templates/js/part.js:713
#: templates/js/stock.js:554 templates/js/stock.js:956
#: templates/js/stock.js:1001
msgid "Description"
@@ -487,7 +487,7 @@ msgstr ""
#: stock/templates/stock/item_base.html:255
#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364
#: templates/js/bom.js:205 templates/js/build.js:476 templates/js/build.js:1014
-#: templates/js/part.js:717 templates/js/stock.js:1136
+#: templates/js/part.js:787 templates/js/stock.js:1136
#: templates/js/stock.js:1398
msgid "Quantity"
msgstr ""
@@ -644,7 +644,7 @@ msgstr ""
#: templates/js/barcode.js:362 templates/js/bom.js:163
#: templates/js/build.js:741 templates/js/build.js:981
#: templates/js/company.js:140 templates/js/company.js:238
-#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523
+#: templates/js/part.js:233 templates/js/part.js:396 templates/js/stock.js:523
#: templates/js/stock.js:1470
msgid "Part"
msgstr ""
@@ -1876,7 +1876,7 @@ msgstr ""
msgid "Image URL"
msgstr ""
-#: company/forms.py:118 templates/js/part.js:708
+#: company/forms.py:118 templates/js/part.js:778
msgid "Single Price"
msgstr ""
@@ -1955,7 +1955,7 @@ msgstr ""
#: order/models.py:103 part/models.py:743
#: report/templates/report/inventree_build_order_base.html:165
#: templates/js/company.js:188 templates/js/company.js:318
-#: templates/js/part.js:431
+#: templates/js/part.js:489
msgid "Link"
msgstr ""
@@ -2338,7 +2338,8 @@ msgstr ""
#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196
#: templates/InvenTree/search.html:232
#: templates/InvenTree/settings/tabs.html:31 templates/js/part.js:173
-#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26
+#: templates/js/part.js:297 templates/js/part.js:456 templates/js/stock.js:563
+#: templates/navbar.html:26
msgid "Stock"
msgstr ""
@@ -2975,7 +2976,7 @@ msgstr ""
#: order/templates/order/order_base.html:180
#: order/templates/order/purchase_order_detail.html:100
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: part/templates/part/category.html:208 part/templates/part/category.html:250
#: stock/templates/stock/location.html:191 templates/js/stock.js:708
#: templates/js/stock.js:1296
msgid "New Location"
@@ -3191,12 +3192,12 @@ msgstr ""
#: order/templates/order/receive_parts.html:14 part/api.py:45
#: part/models.py:322 part/templates/part/cat_link.html:7
-#: part/templates/part/category.html:99 part/templates/part/category.html:141
+#: part/templates/part/category.html:99 part/templates/part/category.html:148
#: part/templates/part/category_navbar.html:22
#: part/templates/part/category_navbar.html:29
#: part/templates/part/category_partlist.html:10
#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
-#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:577
+#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:647
#: templates/navbar.html:23 templates/stats.html:80 templates/stats.html:89
#: users/models.py:40
msgid "Parts"
@@ -3211,7 +3212,7 @@ msgid "Order Code"
msgstr ""
#: order/templates/order/receive_parts.html:21
-#: part/templates/part/part_base.html:136 templates/js/part.js:414
+#: part/templates/part/part_base.html:136 templates/js/part.js:472
msgid "On Order"
msgstr ""
@@ -3793,7 +3794,7 @@ msgid "Part keywords to improve visibility in search results"
msgstr ""
#: part/models.py:724 part/models.py:2213 part/templates/part/detail.html:73
-#: part/templates/part/set_category.html:15 templates/js/part.js:385
+#: part/templates/part/set_category.html:15 templates/js/part.js:443
msgid "Category"
msgstr ""
@@ -3803,6 +3804,7 @@ msgstr ""
#: part/models.py:730 part/templates/part/detail.html:28
#: part/templates/part/part_base.html:87 templates/js/part.js:161
+#: templates/js/part.js:288
msgid "IPN"
msgstr ""
@@ -3926,7 +3928,7 @@ msgstr ""
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2077 templates/js/part.js:638 templates/js/stock.js:104
+#: part/models.py:2077 templates/js/part.js:708 templates/js/stock.js:104
msgid "Test Name"
msgstr ""
@@ -3942,7 +3944,7 @@ msgstr ""
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2089 templates/js/part.js:647
+#: part/models.py:2089 templates/js/part.js:717
#: templates/js/table_filters.js:223
msgid "Required"
msgstr ""
@@ -3951,7 +3953,7 @@ msgstr ""
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2095 templates/js/part.js:655
+#: part/models.py:2095 templates/js/part.js:725
msgid "Requires Value"
msgstr ""
@@ -3959,7 +3961,7 @@ msgstr ""
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2101 templates/js/part.js:662
+#: part/models.py:2101 templates/js/part.js:732
msgid "Requires Attachment"
msgstr ""
@@ -4295,24 +4297,32 @@ msgstr ""
msgid "Export Data"
msgstr ""
-#: part/templates/part/category.html:186
+#: part/templates/part/category.html:132
+msgid "View list display"
+msgstr ""
+
+#: part/templates/part/category.html:135
+msgid "View grid display"
+msgstr ""
+
+#: part/templates/part/category.html:209
#: stock/templates/stock/location.html:192 templates/js/stock.js:709
msgid "Create new location"
msgstr ""
-#: part/templates/part/category.html:191 part/templates/part/category.html:221
+#: part/templates/part/category.html:214 part/templates/part/category.html:244
msgid "New Category"
msgstr ""
-#: part/templates/part/category.html:192
+#: part/templates/part/category.html:215
msgid "Create new category"
msgstr ""
-#: part/templates/part/category.html:222
+#: part/templates/part/category.html:245
msgid "Create new Part Category"
msgstr ""
-#: part/templates/part/category.html:228 stock/views.py:1391
+#: part/templates/part/category.html:251 stock/views.py:1391
msgid "Create new Stock Location"
msgstr ""
@@ -4717,7 +4727,8 @@ msgstr ""
msgid "Can Build"
msgstr ""
-#: part/templates/part/part_base.html:178 templates/js/part.js:418
+#: part/templates/part/part_base.html:178 templates/js/part.js:304
+#: templates/js/part.js:476
msgid "Building"
msgstr ""
@@ -4793,7 +4804,7 @@ msgid "Showing stock for all variants of %(full_name)s"
msgstr ""
#: part/templates/part/stock_count.html:7 templates/js/bom.js:239
-#: templates/js/part.js:422
+#: templates/js/part.js:294 templates/js/part.js:480
msgid "No Stock"
msgstr ""
@@ -6571,7 +6582,7 @@ msgstr ""
msgid "No builds matching query"
msgstr ""
-#: templates/js/build.js:708 templates/js/part.js:324 templates/js/part.js:546
+#: templates/js/build.js:708 templates/js/part.js:382 templates/js/part.js:616
#: templates/js/stock.js:511 templates/js/stock.js:938
#: templates/js/stock.js:1458
msgid "Select"
@@ -6796,47 +6807,47 @@ msgstr ""
msgid "No variants found"
msgstr ""
-#: templates/js/part.js:272 templates/js/part.js:452
+#: templates/js/part.js:272 templates/js/part.js:510
msgid "No parts found"
msgstr ""
-#: templates/js/part.js:391
+#: templates/js/part.js:449
msgid "No category"
msgstr ""
-#: templates/js/part.js:409 templates/js/table_filters.js:319
+#: templates/js/part.js:467 templates/js/table_filters.js:319
msgid "Low stock"
msgstr ""
-#: templates/js/part.js:571 templates/js/stock.js:962
+#: templates/js/part.js:641 templates/js/stock.js:962
msgid "Path"
msgstr ""
-#: templates/js/part.js:588
+#: templates/js/part.js:658
msgid "YES"
msgstr ""
-#: templates/js/part.js:590
+#: templates/js/part.js:660
msgid "NO"
msgstr ""
-#: templates/js/part.js:624
+#: templates/js/part.js:694
msgid "No test templates matching query"
msgstr ""
-#: templates/js/part.js:675 templates/js/stock.js:75
+#: templates/js/part.js:745 templates/js/stock.js:75
msgid "Edit test result"
msgstr ""
-#: templates/js/part.js:676 templates/js/stock.js:76
+#: templates/js/part.js:746 templates/js/stock.js:76
msgid "Delete test result"
msgstr ""
-#: templates/js/part.js:682
+#: templates/js/part.js:752
msgid "This test is defined for a parent part"
msgstr ""
-#: templates/js/part.js:727
+#: templates/js/part.js:797
msgid "Single Price Difference"
msgstr ""
diff --git a/InvenTree/locale/ja/LC_MESSAGES/django.po b/InvenTree/locale/ja/LC_MESSAGES/django.po
index 1d45d44893..6587e0c9ec 100644
--- a/InvenTree/locale/ja/LC_MESSAGES/django.po
+++ b/InvenTree/locale/ja/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-29 09:06+0000\n"
+"POT-Creation-Date: 2021-05-29 21:51+0000\n"
"PO-Revision-Date: 2021-05-28 04:02\n"
"Last-Translator: \n"
"Language-Team: Japanese\n"
@@ -136,7 +136,7 @@ msgstr ""
#: part/models.py:686 part/models.py:2140 part/templates/part/params.html:27
#: report/models.py:179 templates/InvenTree/search.html:137
#: templates/InvenTree/search.html:289 templates/js/part.js:110
-#: templates/js/part.js:553 templates/js/stock.js:944
+#: templates/js/part.js:623 templates/js/stock.js:944
msgid "Name"
msgstr ""
@@ -157,7 +157,7 @@ msgstr ""
#: templates/js/build.js:736 templates/js/build.js:1004
#: templates/js/company.js:56 templates/js/order.js:183
#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252
-#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643
+#: templates/js/part.js:429 templates/js/part.js:635 templates/js/part.js:713
#: templates/js/stock.js:554 templates/js/stock.js:956
#: templates/js/stock.js:1001
msgid "Description"
@@ -487,7 +487,7 @@ msgstr ""
#: stock/templates/stock/item_base.html:255
#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364
#: templates/js/bom.js:205 templates/js/build.js:476 templates/js/build.js:1014
-#: templates/js/part.js:717 templates/js/stock.js:1136
+#: templates/js/part.js:787 templates/js/stock.js:1136
#: templates/js/stock.js:1398
msgid "Quantity"
msgstr ""
@@ -644,7 +644,7 @@ msgstr ""
#: templates/js/barcode.js:362 templates/js/bom.js:163
#: templates/js/build.js:741 templates/js/build.js:981
#: templates/js/company.js:140 templates/js/company.js:238
-#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523
+#: templates/js/part.js:233 templates/js/part.js:396 templates/js/stock.js:523
#: templates/js/stock.js:1470
msgid "Part"
msgstr ""
@@ -1876,7 +1876,7 @@ msgstr ""
msgid "Image URL"
msgstr ""
-#: company/forms.py:118 templates/js/part.js:708
+#: company/forms.py:118 templates/js/part.js:778
msgid "Single Price"
msgstr ""
@@ -1955,7 +1955,7 @@ msgstr ""
#: order/models.py:103 part/models.py:743
#: report/templates/report/inventree_build_order_base.html:165
#: templates/js/company.js:188 templates/js/company.js:318
-#: templates/js/part.js:431
+#: templates/js/part.js:489
msgid "Link"
msgstr ""
@@ -2338,7 +2338,8 @@ msgstr ""
#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196
#: templates/InvenTree/search.html:232
#: templates/InvenTree/settings/tabs.html:31 templates/js/part.js:173
-#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26
+#: templates/js/part.js:297 templates/js/part.js:456 templates/js/stock.js:563
+#: templates/navbar.html:26
msgid "Stock"
msgstr ""
@@ -2975,7 +2976,7 @@ msgstr ""
#: order/templates/order/order_base.html:180
#: order/templates/order/purchase_order_detail.html:100
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: part/templates/part/category.html:208 part/templates/part/category.html:250
#: stock/templates/stock/location.html:191 templates/js/stock.js:708
#: templates/js/stock.js:1296
msgid "New Location"
@@ -3191,12 +3192,12 @@ msgstr ""
#: order/templates/order/receive_parts.html:14 part/api.py:45
#: part/models.py:322 part/templates/part/cat_link.html:7
-#: part/templates/part/category.html:99 part/templates/part/category.html:141
+#: part/templates/part/category.html:99 part/templates/part/category.html:148
#: part/templates/part/category_navbar.html:22
#: part/templates/part/category_navbar.html:29
#: part/templates/part/category_partlist.html:10
#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
-#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:577
+#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:647
#: templates/navbar.html:23 templates/stats.html:80 templates/stats.html:89
#: users/models.py:40
msgid "Parts"
@@ -3211,7 +3212,7 @@ msgid "Order Code"
msgstr ""
#: order/templates/order/receive_parts.html:21
-#: part/templates/part/part_base.html:136 templates/js/part.js:414
+#: part/templates/part/part_base.html:136 templates/js/part.js:472
msgid "On Order"
msgstr ""
@@ -3793,7 +3794,7 @@ msgid "Part keywords to improve visibility in search results"
msgstr ""
#: part/models.py:724 part/models.py:2213 part/templates/part/detail.html:73
-#: part/templates/part/set_category.html:15 templates/js/part.js:385
+#: part/templates/part/set_category.html:15 templates/js/part.js:443
msgid "Category"
msgstr ""
@@ -3803,6 +3804,7 @@ msgstr ""
#: part/models.py:730 part/templates/part/detail.html:28
#: part/templates/part/part_base.html:87 templates/js/part.js:161
+#: templates/js/part.js:288
msgid "IPN"
msgstr ""
@@ -3926,7 +3928,7 @@ msgstr ""
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2077 templates/js/part.js:638 templates/js/stock.js:104
+#: part/models.py:2077 templates/js/part.js:708 templates/js/stock.js:104
msgid "Test Name"
msgstr ""
@@ -3942,7 +3944,7 @@ msgstr ""
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2089 templates/js/part.js:647
+#: part/models.py:2089 templates/js/part.js:717
#: templates/js/table_filters.js:223
msgid "Required"
msgstr ""
@@ -3951,7 +3953,7 @@ msgstr ""
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2095 templates/js/part.js:655
+#: part/models.py:2095 templates/js/part.js:725
msgid "Requires Value"
msgstr ""
@@ -3959,7 +3961,7 @@ msgstr ""
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2101 templates/js/part.js:662
+#: part/models.py:2101 templates/js/part.js:732
msgid "Requires Attachment"
msgstr ""
@@ -4295,24 +4297,32 @@ msgstr ""
msgid "Export Data"
msgstr ""
-#: part/templates/part/category.html:186
+#: part/templates/part/category.html:132
+msgid "View list display"
+msgstr ""
+
+#: part/templates/part/category.html:135
+msgid "View grid display"
+msgstr ""
+
+#: part/templates/part/category.html:209
#: stock/templates/stock/location.html:192 templates/js/stock.js:709
msgid "Create new location"
msgstr ""
-#: part/templates/part/category.html:191 part/templates/part/category.html:221
+#: part/templates/part/category.html:214 part/templates/part/category.html:244
msgid "New Category"
msgstr ""
-#: part/templates/part/category.html:192
+#: part/templates/part/category.html:215
msgid "Create new category"
msgstr ""
-#: part/templates/part/category.html:222
+#: part/templates/part/category.html:245
msgid "Create new Part Category"
msgstr ""
-#: part/templates/part/category.html:228 stock/views.py:1391
+#: part/templates/part/category.html:251 stock/views.py:1391
msgid "Create new Stock Location"
msgstr ""
@@ -4717,7 +4727,8 @@ msgstr ""
msgid "Can Build"
msgstr ""
-#: part/templates/part/part_base.html:178 templates/js/part.js:418
+#: part/templates/part/part_base.html:178 templates/js/part.js:304
+#: templates/js/part.js:476
msgid "Building"
msgstr ""
@@ -4793,7 +4804,7 @@ msgid "Showing stock for all variants of %(full_name)s"
msgstr ""
#: part/templates/part/stock_count.html:7 templates/js/bom.js:239
-#: templates/js/part.js:422
+#: templates/js/part.js:294 templates/js/part.js:480
msgid "No Stock"
msgstr ""
@@ -6571,7 +6582,7 @@ msgstr ""
msgid "No builds matching query"
msgstr ""
-#: templates/js/build.js:708 templates/js/part.js:324 templates/js/part.js:546
+#: templates/js/build.js:708 templates/js/part.js:382 templates/js/part.js:616
#: templates/js/stock.js:511 templates/js/stock.js:938
#: templates/js/stock.js:1458
msgid "Select"
@@ -6796,47 +6807,47 @@ msgstr ""
msgid "No variants found"
msgstr ""
-#: templates/js/part.js:272 templates/js/part.js:452
+#: templates/js/part.js:272 templates/js/part.js:510
msgid "No parts found"
msgstr ""
-#: templates/js/part.js:391
+#: templates/js/part.js:449
msgid "No category"
msgstr ""
-#: templates/js/part.js:409 templates/js/table_filters.js:319
+#: templates/js/part.js:467 templates/js/table_filters.js:319
msgid "Low stock"
msgstr ""
-#: templates/js/part.js:571 templates/js/stock.js:962
+#: templates/js/part.js:641 templates/js/stock.js:962
msgid "Path"
msgstr ""
-#: templates/js/part.js:588
+#: templates/js/part.js:658
msgid "YES"
msgstr ""
-#: templates/js/part.js:590
+#: templates/js/part.js:660
msgid "NO"
msgstr ""
-#: templates/js/part.js:624
+#: templates/js/part.js:694
msgid "No test templates matching query"
msgstr ""
-#: templates/js/part.js:675 templates/js/stock.js:75
+#: templates/js/part.js:745 templates/js/stock.js:75
msgid "Edit test result"
msgstr ""
-#: templates/js/part.js:676 templates/js/stock.js:76
+#: templates/js/part.js:746 templates/js/stock.js:76
msgid "Delete test result"
msgstr ""
-#: templates/js/part.js:682
+#: templates/js/part.js:752
msgid "This test is defined for a parent part"
msgstr ""
-#: templates/js/part.js:727
+#: templates/js/part.js:797
msgid "Single Price Difference"
msgstr ""
diff --git a/InvenTree/locale/pl/LC_MESSAGES/django.po b/InvenTree/locale/pl/LC_MESSAGES/django.po
index 0985ce18f1..77fae36926 100644
--- a/InvenTree/locale/pl/LC_MESSAGES/django.po
+++ b/InvenTree/locale/pl/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-29 09:06+0000\n"
+"POT-Creation-Date: 2021-05-29 21:51+0000\n"
"PO-Revision-Date: 2021-05-28 04:02\n"
"Last-Translator: \n"
"Language-Team: Polish\n"
@@ -136,7 +136,7 @@ msgstr "data przesłania"
#: part/models.py:686 part/models.py:2140 part/templates/part/params.html:27
#: report/models.py:179 templates/InvenTree/search.html:137
#: templates/InvenTree/search.html:289 templates/js/part.js:110
-#: templates/js/part.js:553 templates/js/stock.js:944
+#: templates/js/part.js:623 templates/js/stock.js:944
msgid "Name"
msgstr "Nazwa"
@@ -157,7 +157,7 @@ msgstr "Nazwa"
#: templates/js/build.js:736 templates/js/build.js:1004
#: templates/js/company.js:56 templates/js/order.js:183
#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252
-#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643
+#: templates/js/part.js:429 templates/js/part.js:635 templates/js/part.js:713
#: templates/js/stock.js:554 templates/js/stock.js:956
#: templates/js/stock.js:1001
msgid "Description"
@@ -487,7 +487,7 @@ msgstr ""
#: stock/templates/stock/item_base.html:255
#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364
#: templates/js/bom.js:205 templates/js/build.js:476 templates/js/build.js:1014
-#: templates/js/part.js:717 templates/js/stock.js:1136
+#: templates/js/part.js:787 templates/js/stock.js:1136
#: templates/js/stock.js:1398
msgid "Quantity"
msgstr "Ilość"
@@ -644,7 +644,7 @@ msgstr "Zamówienie budowy, do którego budowa jest przypisana"
#: templates/js/barcode.js:362 templates/js/bom.js:163
#: templates/js/build.js:741 templates/js/build.js:981
#: templates/js/company.js:140 templates/js/company.js:238
-#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523
+#: templates/js/part.js:233 templates/js/part.js:396 templates/js/stock.js:523
#: templates/js/stock.js:1470
msgid "Part"
msgstr "Część"
@@ -1876,7 +1876,7 @@ msgstr "URL"
msgid "Image URL"
msgstr "URL zdjęcia"
-#: company/forms.py:118 templates/js/part.js:708
+#: company/forms.py:118 templates/js/part.js:778
msgid "Single Price"
msgstr "Cena jednostkowa"
@@ -1955,7 +1955,7 @@ msgstr "Punkt kontaktowy"
#: order/models.py:103 part/models.py:743
#: report/templates/report/inventree_build_order_base.html:165
#: templates/js/company.js:188 templates/js/company.js:318
-#: templates/js/part.js:431
+#: templates/js/part.js:489
msgid "Link"
msgstr "Łącze"
@@ -2338,7 +2338,8 @@ msgstr ""
#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196
#: templates/InvenTree/search.html:232
#: templates/InvenTree/settings/tabs.html:31 templates/js/part.js:173
-#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26
+#: templates/js/part.js:297 templates/js/part.js:456 templates/js/stock.js:563
+#: templates/navbar.html:26
msgid "Stock"
msgstr "Stan"
@@ -2975,7 +2976,7 @@ msgstr "Wydany"
#: order/templates/order/order_base.html:180
#: order/templates/order/purchase_order_detail.html:100
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: part/templates/part/category.html:208 part/templates/part/category.html:250
#: stock/templates/stock/location.html:191 templates/js/stock.js:708
#: templates/js/stock.js:1296
msgid "New Location"
@@ -3191,12 +3192,12 @@ msgstr ""
#: order/templates/order/receive_parts.html:14 part/api.py:45
#: part/models.py:322 part/templates/part/cat_link.html:7
-#: part/templates/part/category.html:99 part/templates/part/category.html:141
+#: part/templates/part/category.html:99 part/templates/part/category.html:148
#: part/templates/part/category_navbar.html:22
#: part/templates/part/category_navbar.html:29
#: part/templates/part/category_partlist.html:10
#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
-#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:577
+#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:647
#: templates/navbar.html:23 templates/stats.html:80 templates/stats.html:89
#: users/models.py:40
msgid "Parts"
@@ -3211,7 +3212,7 @@ msgid "Order Code"
msgstr "Kod zamówienia"
#: order/templates/order/receive_parts.html:21
-#: part/templates/part/part_base.html:136 templates/js/part.js:414
+#: part/templates/part/part_base.html:136 templates/js/part.js:472
msgid "On Order"
msgstr ""
@@ -3793,7 +3794,7 @@ msgid "Part keywords to improve visibility in search results"
msgstr ""
#: part/models.py:724 part/models.py:2213 part/templates/part/detail.html:73
-#: part/templates/part/set_category.html:15 templates/js/part.js:385
+#: part/templates/part/set_category.html:15 templates/js/part.js:443
msgid "Category"
msgstr "Kategoria"
@@ -3803,6 +3804,7 @@ msgstr ""
#: part/models.py:730 part/templates/part/detail.html:28
#: part/templates/part/part_base.html:87 templates/js/part.js:161
+#: templates/js/part.js:288
msgid "IPN"
msgstr "IPN"
@@ -3926,7 +3928,7 @@ msgstr ""
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2077 templates/js/part.js:638 templates/js/stock.js:104
+#: part/models.py:2077 templates/js/part.js:708 templates/js/stock.js:104
msgid "Test Name"
msgstr "Nazwa testu"
@@ -3942,7 +3944,7 @@ msgstr ""
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2089 templates/js/part.js:647
+#: part/models.py:2089 templates/js/part.js:717
#: templates/js/table_filters.js:223
msgid "Required"
msgstr "Wymagane"
@@ -3951,7 +3953,7 @@ msgstr "Wymagane"
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2095 templates/js/part.js:655
+#: part/models.py:2095 templates/js/part.js:725
msgid "Requires Value"
msgstr ""
@@ -3959,7 +3961,7 @@ msgstr ""
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2101 templates/js/part.js:662
+#: part/models.py:2101 templates/js/part.js:732
msgid "Requires Attachment"
msgstr ""
@@ -4295,24 +4297,32 @@ msgstr ""
msgid "Export Data"
msgstr ""
-#: part/templates/part/category.html:186
+#: part/templates/part/category.html:132
+msgid "View list display"
+msgstr ""
+
+#: part/templates/part/category.html:135
+msgid "View grid display"
+msgstr ""
+
+#: part/templates/part/category.html:209
#: stock/templates/stock/location.html:192 templates/js/stock.js:709
msgid "Create new location"
msgstr ""
-#: part/templates/part/category.html:191 part/templates/part/category.html:221
+#: part/templates/part/category.html:214 part/templates/part/category.html:244
msgid "New Category"
msgstr ""
-#: part/templates/part/category.html:192
+#: part/templates/part/category.html:215
msgid "Create new category"
msgstr ""
-#: part/templates/part/category.html:222
+#: part/templates/part/category.html:245
msgid "Create new Part Category"
msgstr ""
-#: part/templates/part/category.html:228 stock/views.py:1391
+#: part/templates/part/category.html:251 stock/views.py:1391
msgid "Create new Stock Location"
msgstr "Utwórz nową lokalizację magazynową"
@@ -4728,7 +4738,8 @@ msgstr ""
msgid "Can Build"
msgstr ""
-#: part/templates/part/part_base.html:178 templates/js/part.js:418
+#: part/templates/part/part_base.html:178 templates/js/part.js:304
+#: templates/js/part.js:476
msgid "Building"
msgstr ""
@@ -4804,7 +4815,7 @@ msgid "Showing stock for all variants of %(full_name)s"
msgstr ""
#: part/templates/part/stock_count.html:7 templates/js/bom.js:239
-#: templates/js/part.js:422
+#: templates/js/part.js:294 templates/js/part.js:480
msgid "No Stock"
msgstr ""
@@ -6582,7 +6593,7 @@ msgstr ""
msgid "No builds matching query"
msgstr ""
-#: templates/js/build.js:708 templates/js/part.js:324 templates/js/part.js:546
+#: templates/js/build.js:708 templates/js/part.js:382 templates/js/part.js:616
#: templates/js/stock.js:511 templates/js/stock.js:938
#: templates/js/stock.js:1458
msgid "Select"
@@ -6807,47 +6818,47 @@ msgstr ""
msgid "No variants found"
msgstr ""
-#: templates/js/part.js:272 templates/js/part.js:452
+#: templates/js/part.js:272 templates/js/part.js:510
msgid "No parts found"
msgstr ""
-#: templates/js/part.js:391
+#: templates/js/part.js:449
msgid "No category"
msgstr ""
-#: templates/js/part.js:409 templates/js/table_filters.js:319
+#: templates/js/part.js:467 templates/js/table_filters.js:319
msgid "Low stock"
msgstr ""
-#: templates/js/part.js:571 templates/js/stock.js:962
+#: templates/js/part.js:641 templates/js/stock.js:962
msgid "Path"
msgstr ""
-#: templates/js/part.js:588
+#: templates/js/part.js:658
msgid "YES"
msgstr ""
-#: templates/js/part.js:590
+#: templates/js/part.js:660
msgid "NO"
msgstr ""
-#: templates/js/part.js:624
+#: templates/js/part.js:694
msgid "No test templates matching query"
msgstr ""
-#: templates/js/part.js:675 templates/js/stock.js:75
+#: templates/js/part.js:745 templates/js/stock.js:75
msgid "Edit test result"
msgstr ""
-#: templates/js/part.js:676 templates/js/stock.js:76
+#: templates/js/part.js:746 templates/js/stock.js:76
msgid "Delete test result"
msgstr ""
-#: templates/js/part.js:682
+#: templates/js/part.js:752
msgid "This test is defined for a parent part"
msgstr ""
-#: templates/js/part.js:727
+#: templates/js/part.js:797
#, fuzzy
#| msgid "Single Price"
msgid "Single Price Difference"
diff --git a/InvenTree/locale/ru/LC_MESSAGES/django.po b/InvenTree/locale/ru/LC_MESSAGES/django.po
index 31b4c6de9a..2740eda72d 100644
--- a/InvenTree/locale/ru/LC_MESSAGES/django.po
+++ b/InvenTree/locale/ru/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-29 09:06+0000\n"
+"POT-Creation-Date: 2021-05-29 21:51+0000\n"
"PO-Revision-Date: 2021-05-28 04:02\n"
"Last-Translator: \n"
"Language-Team: Russian\n"
@@ -136,7 +136,7 @@ msgstr ""
#: part/models.py:686 part/models.py:2140 part/templates/part/params.html:27
#: report/models.py:179 templates/InvenTree/search.html:137
#: templates/InvenTree/search.html:289 templates/js/part.js:110
-#: templates/js/part.js:553 templates/js/stock.js:944
+#: templates/js/part.js:623 templates/js/stock.js:944
msgid "Name"
msgstr ""
@@ -157,7 +157,7 @@ msgstr ""
#: templates/js/build.js:736 templates/js/build.js:1004
#: templates/js/company.js:56 templates/js/order.js:183
#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252
-#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643
+#: templates/js/part.js:429 templates/js/part.js:635 templates/js/part.js:713
#: templates/js/stock.js:554 templates/js/stock.js:956
#: templates/js/stock.js:1001
msgid "Description"
@@ -487,7 +487,7 @@ msgstr ""
#: stock/templates/stock/item_base.html:255
#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364
#: templates/js/bom.js:205 templates/js/build.js:476 templates/js/build.js:1014
-#: templates/js/part.js:717 templates/js/stock.js:1136
+#: templates/js/part.js:787 templates/js/stock.js:1136
#: templates/js/stock.js:1398
msgid "Quantity"
msgstr ""
@@ -644,7 +644,7 @@ msgstr ""
#: templates/js/barcode.js:362 templates/js/bom.js:163
#: templates/js/build.js:741 templates/js/build.js:981
#: templates/js/company.js:140 templates/js/company.js:238
-#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523
+#: templates/js/part.js:233 templates/js/part.js:396 templates/js/stock.js:523
#: templates/js/stock.js:1470
msgid "Part"
msgstr ""
@@ -1876,7 +1876,7 @@ msgstr ""
msgid "Image URL"
msgstr ""
-#: company/forms.py:118 templates/js/part.js:708
+#: company/forms.py:118 templates/js/part.js:778
msgid "Single Price"
msgstr ""
@@ -1955,7 +1955,7 @@ msgstr ""
#: order/models.py:103 part/models.py:743
#: report/templates/report/inventree_build_order_base.html:165
#: templates/js/company.js:188 templates/js/company.js:318
-#: templates/js/part.js:431
+#: templates/js/part.js:489
msgid "Link"
msgstr ""
@@ -2338,7 +2338,8 @@ msgstr ""
#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196
#: templates/InvenTree/search.html:232
#: templates/InvenTree/settings/tabs.html:31 templates/js/part.js:173
-#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26
+#: templates/js/part.js:297 templates/js/part.js:456 templates/js/stock.js:563
+#: templates/navbar.html:26
msgid "Stock"
msgstr ""
@@ -2975,7 +2976,7 @@ msgstr ""
#: order/templates/order/order_base.html:180
#: order/templates/order/purchase_order_detail.html:100
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: part/templates/part/category.html:208 part/templates/part/category.html:250
#: stock/templates/stock/location.html:191 templates/js/stock.js:708
#: templates/js/stock.js:1296
msgid "New Location"
@@ -3191,12 +3192,12 @@ msgstr ""
#: order/templates/order/receive_parts.html:14 part/api.py:45
#: part/models.py:322 part/templates/part/cat_link.html:7
-#: part/templates/part/category.html:99 part/templates/part/category.html:141
+#: part/templates/part/category.html:99 part/templates/part/category.html:148
#: part/templates/part/category_navbar.html:22
#: part/templates/part/category_navbar.html:29
#: part/templates/part/category_partlist.html:10
#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
-#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:577
+#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:647
#: templates/navbar.html:23 templates/stats.html:80 templates/stats.html:89
#: users/models.py:40
msgid "Parts"
@@ -3211,7 +3212,7 @@ msgid "Order Code"
msgstr ""
#: order/templates/order/receive_parts.html:21
-#: part/templates/part/part_base.html:136 templates/js/part.js:414
+#: part/templates/part/part_base.html:136 templates/js/part.js:472
msgid "On Order"
msgstr ""
@@ -3793,7 +3794,7 @@ msgid "Part keywords to improve visibility in search results"
msgstr ""
#: part/models.py:724 part/models.py:2213 part/templates/part/detail.html:73
-#: part/templates/part/set_category.html:15 templates/js/part.js:385
+#: part/templates/part/set_category.html:15 templates/js/part.js:443
msgid "Category"
msgstr ""
@@ -3803,6 +3804,7 @@ msgstr ""
#: part/models.py:730 part/templates/part/detail.html:28
#: part/templates/part/part_base.html:87 templates/js/part.js:161
+#: templates/js/part.js:288
msgid "IPN"
msgstr ""
@@ -3926,7 +3928,7 @@ msgstr ""
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2077 templates/js/part.js:638 templates/js/stock.js:104
+#: part/models.py:2077 templates/js/part.js:708 templates/js/stock.js:104
msgid "Test Name"
msgstr ""
@@ -3942,7 +3944,7 @@ msgstr ""
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2089 templates/js/part.js:647
+#: part/models.py:2089 templates/js/part.js:717
#: templates/js/table_filters.js:223
msgid "Required"
msgstr ""
@@ -3951,7 +3953,7 @@ msgstr ""
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2095 templates/js/part.js:655
+#: part/models.py:2095 templates/js/part.js:725
msgid "Requires Value"
msgstr ""
@@ -3959,7 +3961,7 @@ msgstr ""
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2101 templates/js/part.js:662
+#: part/models.py:2101 templates/js/part.js:732
msgid "Requires Attachment"
msgstr ""
@@ -4295,24 +4297,32 @@ msgstr ""
msgid "Export Data"
msgstr ""
-#: part/templates/part/category.html:186
+#: part/templates/part/category.html:132
+msgid "View list display"
+msgstr ""
+
+#: part/templates/part/category.html:135
+msgid "View grid display"
+msgstr ""
+
+#: part/templates/part/category.html:209
#: stock/templates/stock/location.html:192 templates/js/stock.js:709
msgid "Create new location"
msgstr ""
-#: part/templates/part/category.html:191 part/templates/part/category.html:221
+#: part/templates/part/category.html:214 part/templates/part/category.html:244
msgid "New Category"
msgstr ""
-#: part/templates/part/category.html:192
+#: part/templates/part/category.html:215
msgid "Create new category"
msgstr ""
-#: part/templates/part/category.html:222
+#: part/templates/part/category.html:245
msgid "Create new Part Category"
msgstr ""
-#: part/templates/part/category.html:228 stock/views.py:1391
+#: part/templates/part/category.html:251 stock/views.py:1391
msgid "Create new Stock Location"
msgstr ""
@@ -4717,7 +4727,8 @@ msgstr ""
msgid "Can Build"
msgstr ""
-#: part/templates/part/part_base.html:178 templates/js/part.js:418
+#: part/templates/part/part_base.html:178 templates/js/part.js:304
+#: templates/js/part.js:476
msgid "Building"
msgstr ""
@@ -4793,7 +4804,7 @@ msgid "Showing stock for all variants of %(full_name)s"
msgstr ""
#: part/templates/part/stock_count.html:7 templates/js/bom.js:239
-#: templates/js/part.js:422
+#: templates/js/part.js:294 templates/js/part.js:480
msgid "No Stock"
msgstr ""
@@ -6571,7 +6582,7 @@ msgstr ""
msgid "No builds matching query"
msgstr ""
-#: templates/js/build.js:708 templates/js/part.js:324 templates/js/part.js:546
+#: templates/js/build.js:708 templates/js/part.js:382 templates/js/part.js:616
#: templates/js/stock.js:511 templates/js/stock.js:938
#: templates/js/stock.js:1458
msgid "Select"
@@ -6796,47 +6807,47 @@ msgstr ""
msgid "No variants found"
msgstr ""
-#: templates/js/part.js:272 templates/js/part.js:452
+#: templates/js/part.js:272 templates/js/part.js:510
msgid "No parts found"
msgstr ""
-#: templates/js/part.js:391
+#: templates/js/part.js:449
msgid "No category"
msgstr ""
-#: templates/js/part.js:409 templates/js/table_filters.js:319
+#: templates/js/part.js:467 templates/js/table_filters.js:319
msgid "Low stock"
msgstr ""
-#: templates/js/part.js:571 templates/js/stock.js:962
+#: templates/js/part.js:641 templates/js/stock.js:962
msgid "Path"
msgstr ""
-#: templates/js/part.js:588
+#: templates/js/part.js:658
msgid "YES"
msgstr ""
-#: templates/js/part.js:590
+#: templates/js/part.js:660
msgid "NO"
msgstr ""
-#: templates/js/part.js:624
+#: templates/js/part.js:694
msgid "No test templates matching query"
msgstr ""
-#: templates/js/part.js:675 templates/js/stock.js:75
+#: templates/js/part.js:745 templates/js/stock.js:75
msgid "Edit test result"
msgstr ""
-#: templates/js/part.js:676 templates/js/stock.js:76
+#: templates/js/part.js:746 templates/js/stock.js:76
msgid "Delete test result"
msgstr ""
-#: templates/js/part.js:682
+#: templates/js/part.js:752
msgid "This test is defined for a parent part"
msgstr ""
-#: templates/js/part.js:727
+#: templates/js/part.js:797
msgid "Single Price Difference"
msgstr ""
diff --git a/InvenTree/locale/tr/LC_MESSAGES/django.po b/InvenTree/locale/tr/LC_MESSAGES/django.po
index 7a5c6c98d1..7ba05b0493 100644
--- a/InvenTree/locale/tr/LC_MESSAGES/django.po
+++ b/InvenTree/locale/tr/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-29 09:06+0000\n"
+"POT-Creation-Date: 2021-05-29 21:51+0000\n"
"PO-Revision-Date: 2021-05-28 04:02\n"
"Last-Translator: \n"
"Language-Team: Turkish\n"
@@ -136,7 +136,7 @@ msgstr "Yükleme tarihi"
#: part/models.py:686 part/models.py:2140 part/templates/part/params.html:27
#: report/models.py:179 templates/InvenTree/search.html:137
#: templates/InvenTree/search.html:289 templates/js/part.js:110
-#: templates/js/part.js:553 templates/js/stock.js:944
+#: templates/js/part.js:623 templates/js/stock.js:944
msgid "Name"
msgstr "Adı"
@@ -157,7 +157,7 @@ msgstr "Adı"
#: templates/js/build.js:736 templates/js/build.js:1004
#: templates/js/company.js:56 templates/js/order.js:183
#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252
-#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643
+#: templates/js/part.js:429 templates/js/part.js:635 templates/js/part.js:713
#: templates/js/stock.js:554 templates/js/stock.js:956
#: templates/js/stock.js:1001
msgid "Description"
@@ -487,7 +487,7 @@ msgstr ""
#: stock/templates/stock/item_base.html:255
#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364
#: templates/js/bom.js:205 templates/js/build.js:476 templates/js/build.js:1014
-#: templates/js/part.js:717 templates/js/stock.js:1136
+#: templates/js/part.js:787 templates/js/stock.js:1136
#: templates/js/stock.js:1398
msgid "Quantity"
msgstr ""
@@ -644,7 +644,7 @@ msgstr ""
#: templates/js/barcode.js:362 templates/js/bom.js:163
#: templates/js/build.js:741 templates/js/build.js:981
#: templates/js/company.js:140 templates/js/company.js:238
-#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523
+#: templates/js/part.js:233 templates/js/part.js:396 templates/js/stock.js:523
#: templates/js/stock.js:1470
msgid "Part"
msgstr ""
@@ -1876,7 +1876,7 @@ msgstr ""
msgid "Image URL"
msgstr ""
-#: company/forms.py:118 templates/js/part.js:708
+#: company/forms.py:118 templates/js/part.js:778
msgid "Single Price"
msgstr ""
@@ -1955,7 +1955,7 @@ msgstr ""
#: order/models.py:103 part/models.py:743
#: report/templates/report/inventree_build_order_base.html:165
#: templates/js/company.js:188 templates/js/company.js:318
-#: templates/js/part.js:431
+#: templates/js/part.js:489
msgid "Link"
msgstr ""
@@ -2338,7 +2338,8 @@ msgstr ""
#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196
#: templates/InvenTree/search.html:232
#: templates/InvenTree/settings/tabs.html:31 templates/js/part.js:173
-#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26
+#: templates/js/part.js:297 templates/js/part.js:456 templates/js/stock.js:563
+#: templates/navbar.html:26
msgid "Stock"
msgstr ""
@@ -2975,7 +2976,7 @@ msgstr ""
#: order/templates/order/order_base.html:180
#: order/templates/order/purchase_order_detail.html:100
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: part/templates/part/category.html:208 part/templates/part/category.html:250
#: stock/templates/stock/location.html:191 templates/js/stock.js:708
#: templates/js/stock.js:1296
msgid "New Location"
@@ -3191,12 +3192,12 @@ msgstr ""
#: order/templates/order/receive_parts.html:14 part/api.py:45
#: part/models.py:322 part/templates/part/cat_link.html:7
-#: part/templates/part/category.html:99 part/templates/part/category.html:141
+#: part/templates/part/category.html:99 part/templates/part/category.html:148
#: part/templates/part/category_navbar.html:22
#: part/templates/part/category_navbar.html:29
#: part/templates/part/category_partlist.html:10
#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
-#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:577
+#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:647
#: templates/navbar.html:23 templates/stats.html:80 templates/stats.html:89
#: users/models.py:40
msgid "Parts"
@@ -3211,7 +3212,7 @@ msgid "Order Code"
msgstr ""
#: order/templates/order/receive_parts.html:21
-#: part/templates/part/part_base.html:136 templates/js/part.js:414
+#: part/templates/part/part_base.html:136 templates/js/part.js:472
msgid "On Order"
msgstr ""
@@ -3793,7 +3794,7 @@ msgid "Part keywords to improve visibility in search results"
msgstr ""
#: part/models.py:724 part/models.py:2213 part/templates/part/detail.html:73
-#: part/templates/part/set_category.html:15 templates/js/part.js:385
+#: part/templates/part/set_category.html:15 templates/js/part.js:443
msgid "Category"
msgstr ""
@@ -3803,6 +3804,7 @@ msgstr ""
#: part/models.py:730 part/templates/part/detail.html:28
#: part/templates/part/part_base.html:87 templates/js/part.js:161
+#: templates/js/part.js:288
msgid "IPN"
msgstr ""
@@ -3926,7 +3928,7 @@ msgstr ""
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2077 templates/js/part.js:638 templates/js/stock.js:104
+#: part/models.py:2077 templates/js/part.js:708 templates/js/stock.js:104
msgid "Test Name"
msgstr ""
@@ -3942,7 +3944,7 @@ msgstr ""
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2089 templates/js/part.js:647
+#: part/models.py:2089 templates/js/part.js:717
#: templates/js/table_filters.js:223
msgid "Required"
msgstr ""
@@ -3951,7 +3953,7 @@ msgstr ""
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2095 templates/js/part.js:655
+#: part/models.py:2095 templates/js/part.js:725
msgid "Requires Value"
msgstr ""
@@ -3959,7 +3961,7 @@ msgstr ""
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2101 templates/js/part.js:662
+#: part/models.py:2101 templates/js/part.js:732
msgid "Requires Attachment"
msgstr ""
@@ -4295,24 +4297,32 @@ msgstr ""
msgid "Export Data"
msgstr ""
-#: part/templates/part/category.html:186
+#: part/templates/part/category.html:132
+msgid "View list display"
+msgstr ""
+
+#: part/templates/part/category.html:135
+msgid "View grid display"
+msgstr ""
+
+#: part/templates/part/category.html:209
#: stock/templates/stock/location.html:192 templates/js/stock.js:709
msgid "Create new location"
msgstr ""
-#: part/templates/part/category.html:191 part/templates/part/category.html:221
+#: part/templates/part/category.html:214 part/templates/part/category.html:244
msgid "New Category"
msgstr ""
-#: part/templates/part/category.html:192
+#: part/templates/part/category.html:215
msgid "Create new category"
msgstr ""
-#: part/templates/part/category.html:222
+#: part/templates/part/category.html:245
msgid "Create new Part Category"
msgstr ""
-#: part/templates/part/category.html:228 stock/views.py:1391
+#: part/templates/part/category.html:251 stock/views.py:1391
msgid "Create new Stock Location"
msgstr ""
@@ -4717,7 +4727,8 @@ msgstr ""
msgid "Can Build"
msgstr ""
-#: part/templates/part/part_base.html:178 templates/js/part.js:418
+#: part/templates/part/part_base.html:178 templates/js/part.js:304
+#: templates/js/part.js:476
msgid "Building"
msgstr ""
@@ -4793,7 +4804,7 @@ msgid "Showing stock for all variants of %(full_name)s"
msgstr ""
#: part/templates/part/stock_count.html:7 templates/js/bom.js:239
-#: templates/js/part.js:422
+#: templates/js/part.js:294 templates/js/part.js:480
msgid "No Stock"
msgstr ""
@@ -6571,7 +6582,7 @@ msgstr ""
msgid "No builds matching query"
msgstr ""
-#: templates/js/build.js:708 templates/js/part.js:324 templates/js/part.js:546
+#: templates/js/build.js:708 templates/js/part.js:382 templates/js/part.js:616
#: templates/js/stock.js:511 templates/js/stock.js:938
#: templates/js/stock.js:1458
msgid "Select"
@@ -6796,47 +6807,47 @@ msgstr ""
msgid "No variants found"
msgstr ""
-#: templates/js/part.js:272 templates/js/part.js:452
+#: templates/js/part.js:272 templates/js/part.js:510
msgid "No parts found"
msgstr ""
-#: templates/js/part.js:391
+#: templates/js/part.js:449
msgid "No category"
msgstr ""
-#: templates/js/part.js:409 templates/js/table_filters.js:319
+#: templates/js/part.js:467 templates/js/table_filters.js:319
msgid "Low stock"
msgstr ""
-#: templates/js/part.js:571 templates/js/stock.js:962
+#: templates/js/part.js:641 templates/js/stock.js:962
msgid "Path"
msgstr ""
-#: templates/js/part.js:588
+#: templates/js/part.js:658
msgid "YES"
msgstr ""
-#: templates/js/part.js:590
+#: templates/js/part.js:660
msgid "NO"
msgstr ""
-#: templates/js/part.js:624
+#: templates/js/part.js:694
msgid "No test templates matching query"
msgstr ""
-#: templates/js/part.js:675 templates/js/stock.js:75
+#: templates/js/part.js:745 templates/js/stock.js:75
msgid "Edit test result"
msgstr ""
-#: templates/js/part.js:676 templates/js/stock.js:76
+#: templates/js/part.js:746 templates/js/stock.js:76
msgid "Delete test result"
msgstr ""
-#: templates/js/part.js:682
+#: templates/js/part.js:752
msgid "This test is defined for a parent part"
msgstr ""
-#: templates/js/part.js:727
+#: templates/js/part.js:797
msgid "Single Price Difference"
msgstr ""
diff --git a/InvenTree/locale/zh/LC_MESSAGES/django.po b/InvenTree/locale/zh/LC_MESSAGES/django.po
index 18dce65e24..e71cff2879 100644
--- a/InvenTree/locale/zh/LC_MESSAGES/django.po
+++ b/InvenTree/locale/zh/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-29 09:06+0000\n"
+"POT-Creation-Date: 2021-05-29 21:51+0000\n"
"PO-Revision-Date: 2021-05-28 04:02\n"
"Last-Translator: \n"
"Language-Team: Chinese Simplified\n"
@@ -136,7 +136,7 @@ msgstr "上传日期"
#: part/models.py:686 part/models.py:2140 part/templates/part/params.html:27
#: report/models.py:179 templates/InvenTree/search.html:137
#: templates/InvenTree/search.html:289 templates/js/part.js:110
-#: templates/js/part.js:553 templates/js/stock.js:944
+#: templates/js/part.js:623 templates/js/stock.js:944
msgid "Name"
msgstr "名称"
@@ -157,7 +157,7 @@ msgstr "名称"
#: templates/js/build.js:736 templates/js/build.js:1004
#: templates/js/company.js:56 templates/js/order.js:183
#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252
-#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643
+#: templates/js/part.js:429 templates/js/part.js:635 templates/js/part.js:713
#: templates/js/stock.js:554 templates/js/stock.js:956
#: templates/js/stock.js:1001
msgid "Description"
@@ -487,7 +487,7 @@ msgstr ""
#: stock/templates/stock/item_base.html:255
#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364
#: templates/js/bom.js:205 templates/js/build.js:476 templates/js/build.js:1014
-#: templates/js/part.js:717 templates/js/stock.js:1136
+#: templates/js/part.js:787 templates/js/stock.js:1136
#: templates/js/stock.js:1398
msgid "Quantity"
msgstr ""
@@ -644,7 +644,7 @@ msgstr ""
#: templates/js/barcode.js:362 templates/js/bom.js:163
#: templates/js/build.js:741 templates/js/build.js:981
#: templates/js/company.js:140 templates/js/company.js:238
-#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523
+#: templates/js/part.js:233 templates/js/part.js:396 templates/js/stock.js:523
#: templates/js/stock.js:1470
msgid "Part"
msgstr ""
@@ -1876,7 +1876,7 @@ msgstr ""
msgid "Image URL"
msgstr ""
-#: company/forms.py:118 templates/js/part.js:708
+#: company/forms.py:118 templates/js/part.js:778
msgid "Single Price"
msgstr ""
@@ -1955,7 +1955,7 @@ msgstr ""
#: order/models.py:103 part/models.py:743
#: report/templates/report/inventree_build_order_base.html:165
#: templates/js/company.js:188 templates/js/company.js:318
-#: templates/js/part.js:431
+#: templates/js/part.js:489
msgid "Link"
msgstr ""
@@ -2338,7 +2338,8 @@ msgstr ""
#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196
#: templates/InvenTree/search.html:232
#: templates/InvenTree/settings/tabs.html:31 templates/js/part.js:173
-#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26
+#: templates/js/part.js:297 templates/js/part.js:456 templates/js/stock.js:563
+#: templates/navbar.html:26
msgid "Stock"
msgstr ""
@@ -2975,7 +2976,7 @@ msgstr ""
#: order/templates/order/order_base.html:180
#: order/templates/order/purchase_order_detail.html:100
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: part/templates/part/category.html:208 part/templates/part/category.html:250
#: stock/templates/stock/location.html:191 templates/js/stock.js:708
#: templates/js/stock.js:1296
msgid "New Location"
@@ -3191,12 +3192,12 @@ msgstr ""
#: order/templates/order/receive_parts.html:14 part/api.py:45
#: part/models.py:322 part/templates/part/cat_link.html:7
-#: part/templates/part/category.html:99 part/templates/part/category.html:141
+#: part/templates/part/category.html:99 part/templates/part/category.html:148
#: part/templates/part/category_navbar.html:22
#: part/templates/part/category_navbar.html:29
#: part/templates/part/category_partlist.html:10
#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
-#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:577
+#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:647
#: templates/navbar.html:23 templates/stats.html:80 templates/stats.html:89
#: users/models.py:40
msgid "Parts"
@@ -3211,7 +3212,7 @@ msgid "Order Code"
msgstr ""
#: order/templates/order/receive_parts.html:21
-#: part/templates/part/part_base.html:136 templates/js/part.js:414
+#: part/templates/part/part_base.html:136 templates/js/part.js:472
msgid "On Order"
msgstr ""
@@ -3793,7 +3794,7 @@ msgid "Part keywords to improve visibility in search results"
msgstr ""
#: part/models.py:724 part/models.py:2213 part/templates/part/detail.html:73
-#: part/templates/part/set_category.html:15 templates/js/part.js:385
+#: part/templates/part/set_category.html:15 templates/js/part.js:443
msgid "Category"
msgstr ""
@@ -3803,6 +3804,7 @@ msgstr ""
#: part/models.py:730 part/templates/part/detail.html:28
#: part/templates/part/part_base.html:87 templates/js/part.js:161
+#: templates/js/part.js:288
msgid "IPN"
msgstr ""
@@ -3926,7 +3928,7 @@ msgstr ""
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2077 templates/js/part.js:638 templates/js/stock.js:104
+#: part/models.py:2077 templates/js/part.js:708 templates/js/stock.js:104
msgid "Test Name"
msgstr ""
@@ -3942,7 +3944,7 @@ msgstr ""
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2089 templates/js/part.js:647
+#: part/models.py:2089 templates/js/part.js:717
#: templates/js/table_filters.js:223
msgid "Required"
msgstr ""
@@ -3951,7 +3953,7 @@ msgstr ""
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2095 templates/js/part.js:655
+#: part/models.py:2095 templates/js/part.js:725
msgid "Requires Value"
msgstr ""
@@ -3959,7 +3961,7 @@ msgstr ""
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2101 templates/js/part.js:662
+#: part/models.py:2101 templates/js/part.js:732
msgid "Requires Attachment"
msgstr ""
@@ -4295,24 +4297,32 @@ msgstr ""
msgid "Export Data"
msgstr ""
-#: part/templates/part/category.html:186
+#: part/templates/part/category.html:132
+msgid "View list display"
+msgstr ""
+
+#: part/templates/part/category.html:135
+msgid "View grid display"
+msgstr ""
+
+#: part/templates/part/category.html:209
#: stock/templates/stock/location.html:192 templates/js/stock.js:709
msgid "Create new location"
msgstr ""
-#: part/templates/part/category.html:191 part/templates/part/category.html:221
+#: part/templates/part/category.html:214 part/templates/part/category.html:244
msgid "New Category"
msgstr ""
-#: part/templates/part/category.html:192
+#: part/templates/part/category.html:215
msgid "Create new category"
msgstr ""
-#: part/templates/part/category.html:222
+#: part/templates/part/category.html:245
msgid "Create new Part Category"
msgstr ""
-#: part/templates/part/category.html:228 stock/views.py:1391
+#: part/templates/part/category.html:251 stock/views.py:1391
msgid "Create new Stock Location"
msgstr ""
@@ -4717,7 +4727,8 @@ msgstr ""
msgid "Can Build"
msgstr ""
-#: part/templates/part/part_base.html:178 templates/js/part.js:418
+#: part/templates/part/part_base.html:178 templates/js/part.js:304
+#: templates/js/part.js:476
msgid "Building"
msgstr ""
@@ -4793,7 +4804,7 @@ msgid "Showing stock for all variants of %(full_name)s"
msgstr ""
#: part/templates/part/stock_count.html:7 templates/js/bom.js:239
-#: templates/js/part.js:422
+#: templates/js/part.js:294 templates/js/part.js:480
msgid "No Stock"
msgstr ""
@@ -6571,7 +6582,7 @@ msgstr ""
msgid "No builds matching query"
msgstr ""
-#: templates/js/build.js:708 templates/js/part.js:324 templates/js/part.js:546
+#: templates/js/build.js:708 templates/js/part.js:382 templates/js/part.js:616
#: templates/js/stock.js:511 templates/js/stock.js:938
#: templates/js/stock.js:1458
msgid "Select"
@@ -6796,47 +6807,47 @@ msgstr ""
msgid "No variants found"
msgstr ""
-#: templates/js/part.js:272 templates/js/part.js:452
+#: templates/js/part.js:272 templates/js/part.js:510
msgid "No parts found"
msgstr ""
-#: templates/js/part.js:391
+#: templates/js/part.js:449
msgid "No category"
msgstr ""
-#: templates/js/part.js:409 templates/js/table_filters.js:319
+#: templates/js/part.js:467 templates/js/table_filters.js:319
msgid "Low stock"
msgstr ""
-#: templates/js/part.js:571 templates/js/stock.js:962
+#: templates/js/part.js:641 templates/js/stock.js:962
msgid "Path"
msgstr ""
-#: templates/js/part.js:588
+#: templates/js/part.js:658
msgid "YES"
msgstr ""
-#: templates/js/part.js:590
+#: templates/js/part.js:660
msgid "NO"
msgstr ""
-#: templates/js/part.js:624
+#: templates/js/part.js:694
msgid "No test templates matching query"
msgstr ""
-#: templates/js/part.js:675 templates/js/stock.js:75
+#: templates/js/part.js:745 templates/js/stock.js:75
msgid "Edit test result"
msgstr ""
-#: templates/js/part.js:676 templates/js/stock.js:76
+#: templates/js/part.js:746 templates/js/stock.js:76
msgid "Delete test result"
msgstr ""
-#: templates/js/part.js:682
+#: templates/js/part.js:752
msgid "This test is defined for a parent part"
msgstr ""
-#: templates/js/part.js:727
+#: templates/js/part.js:797
msgid "Single Price Difference"
msgstr ""