\n"
@@ -18,20 +18,20 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: InvenTree/api.py:50
+#: InvenTree/api.py:49
msgid "API endpoint not found"
msgstr ""
-#: InvenTree/exceptions.py:47
+#: InvenTree/exceptions.py:46
msgid "Error details can be found in the admin panel"
msgstr ""
-#: InvenTree/fields.py:98
+#: InvenTree/fields.py:96
msgid "Enter date"
msgstr ""
#: InvenTree/forms.py:124 templates/account/email_confirm.html:20
-#: templates/js/translated/forms.js:615
+#: templates/js/translated/forms.js:620
msgid "Confirm"
msgstr ""
@@ -80,7 +80,7 @@ msgstr ""
msgid "Duplicate serial: {sn}"
msgstr ""
-#: InvenTree/helpers.py:456 order/models.py:309 order/models.py:463
+#: InvenTree/helpers.py:456 order/models.py:307 order/models.py:461
msgid "Invalid quantity provided"
msgstr ""
@@ -117,89 +117,89 @@ msgstr ""
msgid "Number of unique serial numbers ({s}) must match quantity ({q})"
msgstr ""
-#: InvenTree/models.py:183
+#: InvenTree/models.py:181
msgid "Missing file"
msgstr ""
-#: InvenTree/models.py:184
+#: InvenTree/models.py:182
msgid "Missing external link"
msgstr ""
-#: InvenTree/models.py:195 stock/models.py:2211
+#: InvenTree/models.py:193 stock/models.py:2202
#: templates/js/translated/attachment.js:119
msgid "Attachment"
msgstr ""
-#: InvenTree/models.py:196
+#: InvenTree/models.py:194
msgid "Select file to attach"
msgstr ""
-#: InvenTree/models.py:202 company/models.py:128 company/models.py:342
-#: company/models.py:558 order/models.py:134 part/models.py:867
+#: InvenTree/models.py:200 company/models.py:123 company/models.py:337
+#: company/models.py:569 order/models.py:132 part/models.py:855
#: report/templates/report/inventree_build_order_base.html:165
#: templates/js/translated/company.js:540
#: templates/js/translated/company.js:829 templates/js/translated/part.js:1441
msgid "Link"
msgstr ""
-#: InvenTree/models.py:203 build/models.py:330 part/models.py:868
-#: stock/models.py:674
+#: InvenTree/models.py:201 build/models.py:330 part/models.py:856
+#: stock/models.py:665
msgid "Link to external URL"
msgstr ""
-#: InvenTree/models.py:206 templates/js/translated/attachment.js:163
+#: InvenTree/models.py:204 templates/js/translated/attachment.js:163
msgid "Comment"
msgstr ""
-#: InvenTree/models.py:206
+#: InvenTree/models.py:204
msgid "File comment"
msgstr ""
-#: InvenTree/models.py:212 InvenTree/models.py:213 common/models.py:1543
-#: common/models.py:1544 common/models.py:1775 common/models.py:1776
-#: common/models.py:2003 common/models.py:2004 part/models.py:2369
-#: part/models.py:2389 plugin/models.py:261 plugin/models.py:262
+#: InvenTree/models.py:210 InvenTree/models.py:211 common/models.py:1567
+#: common/models.py:1568 common/models.py:1802 common/models.py:1803
+#: common/models.py:2030 common/models.py:2031 part/models.py:2357
+#: part/models.py:2377 plugin/models.py:260 plugin/models.py:261
#: report/templates/report/inventree_test_report_base.html:96
#: templates/js/translated/stock.js:2518
msgid "User"
msgstr ""
-#: InvenTree/models.py:216
+#: InvenTree/models.py:214
msgid "upload date"
msgstr ""
-#: InvenTree/models.py:239
+#: InvenTree/models.py:237
msgid "Filename must not be empty"
msgstr ""
-#: InvenTree/models.py:262
+#: InvenTree/models.py:260
msgid "Invalid attachment directory"
msgstr ""
-#: InvenTree/models.py:272
+#: InvenTree/models.py:270
#, python-brace-format
msgid "Filename contains illegal character '{c}'"
msgstr ""
-#: InvenTree/models.py:275
+#: InvenTree/models.py:273
msgid "Filename missing extension"
msgstr ""
-#: InvenTree/models.py:282
+#: InvenTree/models.py:280
msgid "Attachment with this filename already exists"
msgstr ""
-#: InvenTree/models.py:289
+#: InvenTree/models.py:287
msgid "Error renaming file"
msgstr ""
-#: InvenTree/models.py:324
+#: InvenTree/models.py:322
msgid "Invalid choice"
msgstr ""
-#: InvenTree/models.py:340 InvenTree/models.py:341 common/models.py:1761
-#: company/models.py:409 label/models.py:109 part/models.py:811
-#: part/models.py:2553 plugin/models.py:100 report/models.py:174
+#: InvenTree/models.py:338 InvenTree/models.py:339 common/models.py:1788
+#: company/models.py:420 label/models.py:104 part/models.py:799
+#: part/models.py:2541 plugin/models.py:99 report/models.py:169
#: templates/InvenTree/notifications/notifications.html:84
#: templates/InvenTree/settings/mixins/urls.html:13
#: templates/InvenTree/settings/plugin.html:49
@@ -212,23 +212,23 @@ msgstr ""
msgid "Name"
msgstr ""
-#: InvenTree/models.py:347 build/models.py:207
-#: build/templates/build/detail.html:24 company/models.py:348
-#: company/models.py:564 company/templates/company/company_base.html:71
+#: InvenTree/models.py:345 build/models.py:207
+#: build/templates/build/detail.html:24 company/models.py:343
+#: company/models.py:575 company/templates/company/company_base.html:71
#: company/templates/company/manufacturer_part.html:75
-#: company/templates/company/supplier_part.html:73 label/models.py:116
-#: order/models.py:132 part/models.py:834 part/templates/part/category.html:74
+#: company/templates/company/supplier_part.html:73 label/models.py:111
+#: order/models.py:130 part/models.py:822 part/templates/part/category.html:74
#: part/templates/part/part_base.html:167
-#: part/templates/part/set_category.html:14 report/models.py:187
-#: report/models.py:552 report/models.py:591
+#: part/templates/part/set_category.html:14 report/models.py:182
+#: report/models.py:547 report/models.py:586
#: report/templates/report/inventree_build_order_base.html:118
#: stock/templates/stock/location.html:103
#: templates/InvenTree/settings/plugin_settings.html:33
#: templates/js/translated/bom.js:553 templates/js/translated/bom.js:872
#: templates/js/translated/build.js:2408 templates/js/translated/company.js:345
#: templates/js/translated/company.js:551
-#: templates/js/translated/company.js:840 templates/js/translated/order.js:1455
-#: templates/js/translated/order.js:1663 templates/js/translated/order.js:2147
+#: templates/js/translated/company.js:840 templates/js/translated/order.js:1562
+#: templates/js/translated/order.js:1770 templates/js/translated/order.js:2254
#: templates/js/translated/part.js:674 templates/js/translated/part.js:1082
#: templates/js/translated/part.js:1355 templates/js/translated/part.js:1755
#: templates/js/translated/part.js:1824 templates/js/translated/stock.js:1686
@@ -236,173 +236,173 @@ msgstr ""
msgid "Description"
msgstr ""
-#: InvenTree/models.py:348
+#: InvenTree/models.py:346
msgid "Description (optional)"
msgstr ""
-#: InvenTree/models.py:356
+#: InvenTree/models.py:354
msgid "parent"
msgstr ""
-#: InvenTree/serializers.py:62 part/models.py:2886
+#: InvenTree/serializers.py:59 part/models.py:2874
msgid "Must be a valid number"
msgstr ""
-#: InvenTree/serializers.py:296
+#: InvenTree/serializers.py:293
msgid "Filename"
msgstr ""
-#: InvenTree/serializers.py:331
+#: InvenTree/serializers.py:328
msgid "Invalid value"
msgstr ""
-#: InvenTree/serializers.py:352
+#: InvenTree/serializers.py:349
msgid "Data File"
msgstr ""
-#: InvenTree/serializers.py:353
+#: InvenTree/serializers.py:350
msgid "Select data file for upload"
msgstr ""
-#: InvenTree/serializers.py:377
+#: InvenTree/serializers.py:374
msgid "Unsupported file type"
msgstr ""
-#: InvenTree/serializers.py:383
+#: InvenTree/serializers.py:380
msgid "File is too large"
msgstr ""
-#: InvenTree/serializers.py:404
+#: InvenTree/serializers.py:401
msgid "No columns found in file"
msgstr ""
-#: InvenTree/serializers.py:407
+#: InvenTree/serializers.py:404
msgid "No data rows found in file"
msgstr ""
-#: InvenTree/serializers.py:533
+#: InvenTree/serializers.py:530
msgid "No data rows provided"
msgstr ""
-#: InvenTree/serializers.py:536
+#: InvenTree/serializers.py:533
msgid "No data columns supplied"
msgstr ""
-#: InvenTree/serializers.py:623
+#: InvenTree/serializers.py:620
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr ""
-#: InvenTree/serializers.py:632
+#: InvenTree/serializers.py:629
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr ""
-#: InvenTree/settings.py:672
+#: InvenTree/settings.py:669
msgid "Czech"
msgstr ""
-#: InvenTree/settings.py:673
+#: InvenTree/settings.py:670
msgid "German"
msgstr ""
-#: InvenTree/settings.py:674
+#: InvenTree/settings.py:671
msgid "Greek"
msgstr ""
-#: InvenTree/settings.py:675
+#: InvenTree/settings.py:672
msgid "English"
msgstr ""
-#: InvenTree/settings.py:676
+#: InvenTree/settings.py:673
msgid "Spanish"
msgstr ""
-#: InvenTree/settings.py:677
+#: InvenTree/settings.py:674
msgid "Spanish (Mexican)"
msgstr ""
-#: InvenTree/settings.py:678
+#: InvenTree/settings.py:675
msgid "Farsi / Persian"
msgstr ""
-#: InvenTree/settings.py:679
+#: InvenTree/settings.py:676
msgid "French"
msgstr ""
-#: InvenTree/settings.py:680
+#: InvenTree/settings.py:677
msgid "Hebrew"
msgstr ""
-#: InvenTree/settings.py:681
+#: InvenTree/settings.py:678
msgid "Hungarian"
msgstr ""
-#: InvenTree/settings.py:682
+#: InvenTree/settings.py:679
msgid "Italian"
msgstr ""
-#: InvenTree/settings.py:683
+#: InvenTree/settings.py:680
msgid "Japanese"
msgstr ""
-#: InvenTree/settings.py:684
+#: InvenTree/settings.py:681
msgid "Korean"
msgstr ""
-#: InvenTree/settings.py:685
+#: InvenTree/settings.py:682
msgid "Dutch"
msgstr ""
-#: InvenTree/settings.py:686
+#: InvenTree/settings.py:683
msgid "Norwegian"
msgstr ""
-#: InvenTree/settings.py:687
+#: InvenTree/settings.py:684
msgid "Polish"
msgstr ""
-#: InvenTree/settings.py:688
+#: InvenTree/settings.py:685
msgid "Portuguese"
msgstr ""
-#: InvenTree/settings.py:689
+#: InvenTree/settings.py:686
msgid "Portuguese (Brazilian)"
msgstr ""
-#: InvenTree/settings.py:690
+#: InvenTree/settings.py:687
msgid "Russian"
msgstr ""
-#: InvenTree/settings.py:691
+#: InvenTree/settings.py:688
msgid "Swedish"
msgstr ""
-#: InvenTree/settings.py:692
+#: InvenTree/settings.py:689
msgid "Thai"
msgstr ""
-#: InvenTree/settings.py:693
+#: InvenTree/settings.py:690
msgid "Turkish"
msgstr ""
-#: InvenTree/settings.py:694
+#: InvenTree/settings.py:691
msgid "Vietnamese"
msgstr ""
-#: InvenTree/settings.py:695
+#: InvenTree/settings.py:692
msgid "Chinese"
msgstr ""
-#: InvenTree/status.py:110
+#: InvenTree/status.py:108
msgid "Background worker check failed"
msgstr ""
-#: InvenTree/status.py:114
+#: InvenTree/status.py:112
msgid "Email backend not configured"
msgstr ""
-#: InvenTree/status.py:117
+#: InvenTree/status.py:115
msgid "InvenTree system health checks failed"
msgstr ""
@@ -417,7 +417,7 @@ msgstr ""
#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:326
#: order/templates/order/order_base.html:134
-#: order/templates/order/sales_order_base.html:132
+#: order/templates/order/sales_order_base.html:133
msgid "Complete"
msgstr ""
@@ -436,8 +436,8 @@ msgstr ""
msgid "Returned"
msgstr ""
-#: InvenTree/status_codes.py:143 order/models.py:1070
-#: templates/js/translated/order.js:2870 templates/js/translated/order.js:3187
+#: InvenTree/status_codes.py:143 order/models.py:1083
+#: templates/js/translated/order.js:3026 templates/js/translated/order.js:3343
msgid "Shipped"
msgstr ""
@@ -553,63 +553,63 @@ msgstr ""
msgid "Production"
msgstr ""
-#: InvenTree/validators.py:25
+#: InvenTree/validators.py:23
msgid "Not a valid currency code"
msgstr ""
-#: InvenTree/validators.py:53
+#: InvenTree/validators.py:51
msgid "Invalid character in part name"
msgstr ""
-#: InvenTree/validators.py:66
+#: InvenTree/validators.py:64
#, python-brace-format
msgid "IPN must match regex pattern {pat}"
msgstr ""
-#: InvenTree/validators.py:80 InvenTree/validators.py:94
-#: InvenTree/validators.py:108
+#: InvenTree/validators.py:78 InvenTree/validators.py:92
+#: InvenTree/validators.py:106
#, python-brace-format
msgid "Reference must match pattern {pattern}"
msgstr ""
-#: InvenTree/validators.py:116
+#: InvenTree/validators.py:114
#, python-brace-format
msgid "Illegal character in name ({x})"
msgstr ""
-#: InvenTree/validators.py:137 InvenTree/validators.py:153
+#: InvenTree/validators.py:135 InvenTree/validators.py:151
msgid "Overage value must not be negative"
msgstr ""
-#: InvenTree/validators.py:155
+#: InvenTree/validators.py:153
msgid "Overage must not exceed 100%"
msgstr ""
-#: InvenTree/validators.py:162
+#: InvenTree/validators.py:160
msgid "Invalid value for overage"
msgstr ""
-#: InvenTree/views.py:535
+#: InvenTree/views.py:534
msgid "Delete Item"
msgstr ""
-#: InvenTree/views.py:584
+#: InvenTree/views.py:583
msgid "Check box to confirm item deletion"
msgstr ""
-#: InvenTree/views.py:599 templates/InvenTree/settings/user.html:22
+#: InvenTree/views.py:598 templates/InvenTree/settings/user.html:22
msgid "Edit User Information"
msgstr ""
-#: InvenTree/views.py:610 templates/InvenTree/settings/user.html:19
+#: InvenTree/views.py:609 templates/InvenTree/settings/user.html:19
msgid "Set Password"
msgstr ""
-#: InvenTree/views.py:629
+#: InvenTree/views.py:628
msgid "Password fields must match"
msgstr ""
-#: InvenTree/views.py:876 templates/navbar.html:152
+#: InvenTree/views.py:875 templates/navbar.html:152
msgid "System Information"
msgstr ""
@@ -630,7 +630,7 @@ msgstr ""
#: order/templates/order/so_sidebar.html:13
#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221
#: templates/InvenTree/search.html:139
-#: templates/InvenTree/settings/sidebar.html:45 users/models.py:44
+#: templates/InvenTree/settings/sidebar.html:45 users/models.py:42
msgid "Build Orders"
msgstr ""
@@ -638,15 +638,15 @@ msgstr ""
msgid "Build Order Reference"
msgstr ""
-#: build/models.py:199 order/models.py:239 order/models.py:591
-#: order/models.py:871 part/models.py:2797
+#: build/models.py:199 order/models.py:237 order/models.py:589
+#: order/models.py:884 part/models.py:2785
#: part/templates/part/upload_bom.html:54
#: report/templates/report/inventree_po_report.html:91
#: report/templates/report/inventree_so_report.html:92
#: templates/js/translated/bom.js:688 templates/js/translated/bom.js:879
-#: templates/js/translated/build.js:1794 templates/js/translated/order.js:1694
-#: templates/js/translated/order.js:1895 templates/js/translated/order.js:3054
-#: templates/js/translated/order.js:3537
+#: templates/js/translated/build.js:1794 templates/js/translated/order.js:1801
+#: templates/js/translated/order.js:2002 templates/js/translated/order.js:3210
+#: templates/js/translated/order.js:3695
msgid "Reference"
msgstr ""
@@ -664,12 +664,12 @@ msgid "BuildOrder to which this build is allocated"
msgstr ""
#: build/models.py:225 build/templates/build/build_base.html:77
-#: build/templates/build/detail.html:29 company/models.py:700
-#: order/models.py:970 order/models.py:1059 part/models.py:366
-#: part/models.py:2315 part/models.py:2331 part/models.py:2350
-#: part/models.py:2367 part/models.py:2469 part/models.py:2591
-#: part/models.py:2681 part/models.py:2772 part/models.py:3062
-#: part/serializers.py:922 part/templates/part/part_app_base.html:8
+#: build/templates/build/detail.html:29 company/models.py:711
+#: order/models.py:983 order/models.py:1072 part/models.py:354
+#: part/models.py:2303 part/models.py:2319 part/models.py:2338
+#: part/models.py:2355 part/models.py:2457 part/models.py:2579
+#: part/models.py:2669 part/models.py:2760 part/models.py:3050
+#: part/serializers.py:917 part/templates/part/part_app_base.html:8
#: part/templates/part/part_pricing.html:12
#: part/templates/part/set_category.html:13
#: part/templates/part/upload_bom.html:52
@@ -684,10 +684,10 @@ msgstr ""
#: templates/js/translated/build.js:1158 templates/js/translated/build.js:1664
#: templates/js/translated/build.js:2100 templates/js/translated/build.js:2413
#: templates/js/translated/company.js:492
-#: templates/js/translated/company.js:749 templates/js/translated/order.js:93
-#: templates/js/translated/order.js:761 templates/js/translated/order.js:1193
-#: templates/js/translated/order.js:1648 templates/js/translated/order.js:2474
-#: templates/js/translated/order.js:2823 templates/js/translated/order.js:3038
+#: templates/js/translated/company.js:749 templates/js/translated/order.js:94
+#: templates/js/translated/order.js:868 templates/js/translated/order.js:1300
+#: templates/js/translated/order.js:1755 templates/js/translated/order.js:2581
+#: templates/js/translated/order.js:2979 templates/js/translated/order.js:3194
#: templates/js/translated/part.js:1067 templates/js/translated/part.js:1137
#: templates/js/translated/part.js:1333 templates/js/translated/stock.js:531
#: templates/js/translated/stock.js:696 templates/js/translated/stock.js:903
@@ -709,7 +709,7 @@ msgid "SalesOrder to which this build is allocated"
msgstr ""
#: build/models.py:247 build/serializers.py:790
-#: templates/js/translated/build.js:2088 templates/js/translated/order.js:2462
+#: templates/js/translated/build.js:2088 templates/js/translated/order.js:2569
msgid "Source Location"
msgstr ""
@@ -749,8 +749,8 @@ msgstr ""
msgid "Build status code"
msgstr ""
-#: build/models.py:285 build/serializers.py:220 order/serializers.py:445
-#: stock/models.py:678 templates/js/translated/order.js:1053
+#: build/models.py:285 build/serializers.py:220 order/serializers.py:440
+#: stock/models.py:669 templates/js/translated/order.js:1160
msgid "Batch Code"
msgstr ""
@@ -758,12 +758,12 @@ msgstr ""
msgid "Batch code for this build output"
msgstr ""
-#: build/models.py:292 order/models.py:136 part/models.py:1006
-#: part/templates/part/part_base.html:305 templates/js/translated/order.js:2160
+#: build/models.py:292 order/models.py:134 part/models.py:994
+#: part/templates/part/part_base.html:305 templates/js/translated/order.js:2267
msgid "Creation Date"
msgstr ""
-#: build/models.py:296 order/models.py:613
+#: build/models.py:296 order/models.py:611
msgid "Target completion date"
msgstr ""
@@ -771,7 +771,7 @@ msgstr ""
msgid "Target date for build completion. Build will be overdue after this date."
msgstr ""
-#: build/models.py:300 order/models.py:282
+#: build/models.py:300 order/models.py:280
#: templates/js/translated/build.js:2490
msgid "Completion Date"
msgstr ""
@@ -789,11 +789,11 @@ msgid "User who issued this build order"
msgstr ""
#: build/models.py:323 build/templates/build/build_base.html:190
-#: build/templates/build/detail.html:115 order/models.py:150
+#: build/templates/build/detail.html:115 order/models.py:148
#: order/templates/order/order_base.html:176
-#: order/templates/order/sales_order_base.html:182 part/models.py:1010
+#: order/templates/order/sales_order_base.html:183 part/models.py:998
#: report/templates/report/inventree_build_order_base.html:159
-#: templates/js/translated/build.js:2470 templates/js/translated/order.js:1489
+#: templates/js/translated/build.js:2470 templates/js/translated/order.js:1596
msgid "Responsible"
msgstr ""
@@ -802,29 +802,29 @@ msgid "User responsible for this build order"
msgstr ""
#: build/models.py:329 build/templates/build/detail.html:101
-#: company/templates/company/manufacturer_part.html:108
+#: company/templates/company/manufacturer_part.html:107
#: company/templates/company/supplier_part.html:132
-#: part/templates/part/part_base.html:346 stock/models.py:672
+#: part/templates/part/part_base.html:346 stock/models.py:663
#: stock/templates/stock/item_base.html:363
msgid "External Link"
msgstr ""
#: build/models.py:334 build/serializers.py:390
-#: build/templates/build/sidebar.html:21 company/models.py:139
-#: company/models.py:571 company/templates/company/sidebar.html:25
-#: order/models.py:154 order/models.py:873 order/models.py:1180
+#: build/templates/build/sidebar.html:21 company/models.py:134
+#: company/models.py:582 company/templates/company/sidebar.html:25
+#: order/models.py:152 order/models.py:886 order/models.py:1193
#: order/templates/order/po_sidebar.html:11
-#: order/templates/order/so_sidebar.html:17 part/models.py:995
+#: order/templates/order/so_sidebar.html:17 part/models.py:983
#: part/templates/part/part_sidebar.html:59
#: report/templates/report/inventree_build_order_base.html:173
-#: stock/models.py:745 stock/models.py:2111 stock/models.py:2217
-#: stock/serializers.py:329 stock/serializers.py:467 stock/serializers.py:736
-#: stock/serializers.py:834 stock/serializers.py:966
+#: stock/models.py:736 stock/models.py:2102 stock/models.py:2208
+#: stock/serializers.py:321 stock/serializers.py:459 stock/serializers.py:728
+#: stock/serializers.py:826 stock/serializers.py:958
#: stock/templates/stock/stock_sidebar.html:25
#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1065
-#: templates/js/translated/company.js:845 templates/js/translated/order.js:1815
-#: templates/js/translated/order.js:1966 templates/js/translated/order.js:2343
-#: templates/js/translated/order.js:3212 templates/js/translated/order.js:3608
+#: templates/js/translated/company.js:845 templates/js/translated/order.js:1922
+#: templates/js/translated/order.js:2073 templates/js/translated/order.js:2450
+#: templates/js/translated/order.js:3368 templates/js/translated/order.js:3766
#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1922
msgid "Notes"
msgstr ""
@@ -858,7 +858,7 @@ msgstr ""
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:1238 order/models.py:1307
+#: build/models.py:1238 order/models.py:1329
msgid "Allocation quantity must be greater than zero"
msgstr ""
@@ -880,16 +880,16 @@ msgstr ""
msgid "Build to allocate parts"
msgstr ""
-#: build/models.py:1392 build/serializers.py:631 order/serializers.py:958
-#: order/serializers.py:976 stock/serializers.py:401 stock/serializers.py:674
-#: stock/serializers.py:792 stock/templates/stock/item_base.html:10
+#: build/models.py:1392 build/serializers.py:631 order/serializers.py:961
+#: order/serializers.py:979 stock/serializers.py:393 stock/serializers.py:666
+#: stock/serializers.py:784 stock/templates/stock/item_base.html:10
#: stock/templates/stock/item_base.html:23
#: stock/templates/stock/item_base.html:357
#: templates/js/translated/build.js:738 templates/js/translated/build.js:743
#: templates/js/translated/build.js:2102 templates/js/translated/build.js:2538
-#: templates/js/translated/order.js:94 templates/js/translated/order.js:2475
-#: templates/js/translated/order.js:2730 templates/js/translated/order.js:2735
-#: templates/js/translated/order.js:2830 templates/js/translated/order.js:2920
+#: templates/js/translated/order.js:95 templates/js/translated/order.js:2582
+#: templates/js/translated/order.js:2886 templates/js/translated/order.js:2891
+#: templates/js/translated/order.js:2986 templates/js/translated/order.js:3076
#: templates/js/translated/stock.js:532 templates/js/translated/stock.js:697
#: templates/js/translated/stock.js:2454
msgid "Stock Item"
@@ -901,11 +901,11 @@ msgstr ""
#: build/models.py:1405 build/serializers.py:190
#: build/templates/build/build_base.html:82
-#: build/templates/build/detail.html:34 common/models.py:1586
-#: company/forms.py:39 company/templates/company/supplier_part.html:258
-#: order/models.py:864 order/models.py:1347 order/serializers.py:1097
-#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:123
-#: part/forms.py:139 part/forms.py:155 part/models.py:2788
+#: build/templates/build/detail.html:34 common/models.py:1610
+#: company/forms.py:38 company/templates/company/supplier_part.html:258
+#: order/models.py:877 order/models.py:1369 order/serializers.py:1100
+#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:121
+#: part/forms.py:137 part/forms.py:153 part/models.py:2776
#: part/templates/part/detail.html:953 part/templates/part/detail.html:1039
#: part/templates/part/part_pricing.html:16
#: part/templates/part/upload_bom.html:53
@@ -914,7 +914,7 @@ msgstr ""
#: report/templates/report/inventree_so_report.html:91
#: report/templates/report/inventree_test_report_base.html:81
#: report/templates/report/inventree_test_report_base.html:139
-#: stock/serializers.py:290 stock/templates/stock/item_base.html:187
+#: stock/serializers.py:282 stock/templates/stock/item_base.html:187
#: stock/templates/stock/item_base.html:252
#: stock/templates/stock/item_base.html:260
#: templates/js/translated/barcode.js:437 templates/js/translated/bom.js:689
@@ -923,11 +923,11 @@ msgstr ""
#: templates/js/translated/build.js:1180 templates/js/translated/build.js:1690
#: templates/js/translated/build.js:2103
#: templates/js/translated/model_renderers.js:108
-#: templates/js/translated/order.js:110 templates/js/translated/order.js:764
-#: templates/js/translated/order.js:1700 templates/js/translated/order.js:1901
-#: templates/js/translated/order.js:2476 templates/js/translated/order.js:2749
-#: templates/js/translated/order.js:2837 templates/js/translated/order.js:2926
-#: templates/js/translated/order.js:3060 templates/js/translated/order.js:3543
+#: templates/js/translated/order.js:111 templates/js/translated/order.js:871
+#: templates/js/translated/order.js:1807 templates/js/translated/order.js:2008
+#: templates/js/translated/order.js:2583 templates/js/translated/order.js:2905
+#: templates/js/translated/order.js:2993 templates/js/translated/order.js:3082
+#: templates/js/translated/order.js:3216 templates/js/translated/order.js:3701
#: templates/js/translated/part.js:967 templates/js/translated/part.js:1969
#: templates/js/translated/part.js:2200 templates/js/translated/part.js:2234
#: templates/js/translated/part.js:2312 templates/js/translated/stock.js:403
@@ -973,10 +973,10 @@ msgstr ""
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:203 build/serializers.py:651 order/models.py:307
-#: order/serializers.py:294 order/serializers.py:440 part/serializers.py:593
-#: part/serializers.py:1089 stock/models.py:505 stock/models.py:1316
-#: stock/serializers.py:302
+#: build/serializers.py:203 build/serializers.py:651 order/models.py:305
+#: order/serializers.py:289 order/serializers.py:435 part/serializers.py:588
+#: part/serializers.py:1084 stock/models.py:496 stock/models.py:1307
+#: stock/serializers.py:294
msgid "Quantity must be greater than zero"
msgstr ""
@@ -988,8 +988,8 @@ msgstr ""
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:227 order/serializers.py:453 order/serializers.py:1101
-#: stock/serializers.py:311 templates/js/translated/order.js:1064
+#: build/serializers.py:227 order/serializers.py:448 order/serializers.py:1104
+#: stock/serializers.py:303 templates/js/translated/order.js:1171
#: templates/js/translated/stock.js:238 templates/js/translated/stock.js:404
msgid "Serial Numbers"
msgstr ""
@@ -1006,7 +1006,7 @@ msgstr ""
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:276 stock/api.py:602
+#: build/serializers.py:276 stock/api.py:590
msgid "The following serial numbers already exist"
msgstr ""
@@ -1014,14 +1014,14 @@ msgstr ""
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:372 order/serializers.py:426 order/serializers.py:531
-#: stock/serializers.py:322 stock/serializers.py:462 stock/serializers.py:827
-#: stock/serializers.py:1068 stock/templates/stock/item_base.html:303
+#: build/serializers.py:372 order/serializers.py:421 order/serializers.py:526
+#: stock/serializers.py:314 stock/serializers.py:454 stock/serializers.py:819
+#: stock/serializers.py:1060 stock/templates/stock/item_base.html:303
#: templates/js/translated/barcode.js:436
#: templates/js/translated/barcode.js:618 templates/js/translated/build.js:750
-#: templates/js/translated/build.js:1702 templates/js/translated/order.js:1091
-#: templates/js/translated/order.js:2742 templates/js/translated/order.js:2845
-#: templates/js/translated/order.js:2853 templates/js/translated/order.js:2934
+#: templates/js/translated/build.js:1702 templates/js/translated/order.js:1198
+#: templates/js/translated/order.js:2898 templates/js/translated/order.js:3001
+#: templates/js/translated/order.js:3009 templates/js/translated/order.js:3090
#: templates/js/translated/part.js:180 templates/js/translated/stock.js:533
#: templates/js/translated/stock.js:698 templates/js/translated/stock.js:905
#: templates/js/translated/stock.js:1793 templates/js/translated/stock.js:2395
@@ -1033,11 +1033,11 @@ msgid "Location for completed build outputs"
msgstr ""
#: build/serializers.py:379 build/templates/build/build_base.html:142
-#: build/templates/build/detail.html:62 order/models.py:607
-#: order/serializers.py:463 stock/templates/stock/item_base.html:193
+#: build/templates/build/detail.html:62 order/models.py:605
+#: order/serializers.py:458 stock/templates/stock/item_base.html:193
#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2442
-#: templates/js/translated/order.js:1198 templates/js/translated/order.js:1459
-#: templates/js/translated/order.js:2152 templates/js/translated/stock.js:1768
+#: templates/js/translated/order.js:1305 templates/js/translated/order.js:1566
+#: templates/js/translated/order.js:2259 templates/js/translated/stock.js:1768
#: templates/js/translated/stock.js:2472 templates/js/translated/stock.js:2604
msgid "Status"
msgstr ""
@@ -1098,8 +1098,8 @@ msgstr ""
msgid "No build outputs have been created for this build order"
msgstr ""
-#: build/serializers.py:556 build/serializers.py:605 part/models.py:2912
-#: part/models.py:3054
+#: build/serializers.py:556 build/serializers.py:605 part/models.py:2900
+#: part/models.py:3042
msgid "BOM Item"
msgstr ""
@@ -1115,11 +1115,11 @@ msgstr ""
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:637 stock/serializers.py:681
+#: build/serializers.py:637 stock/serializers.py:673
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:694 order/serializers.py:1009
+#: build/serializers.py:694 order/serializers.py:1012
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
@@ -1136,7 +1136,7 @@ msgstr ""
msgid "This stock item has already been allocated to this build output"
msgstr ""
-#: build/serializers.py:739 order/serializers.py:1271
+#: build/serializers.py:739 order/serializers.py:1274
msgid "Allocation items must be provided"
msgstr ""
@@ -1234,13 +1234,13 @@ msgid "Stock has not been fully allocated to this Build Order"
msgstr ""
#: build/templates/build/build_base.html:151
-#: build/templates/build/detail.html:131 order/models.py:877
+#: build/templates/build/detail.html:131 order/models.py:890
#: order/templates/order/order_base.html:162
-#: order/templates/order/sales_order_base.html:163
+#: order/templates/order/sales_order_base.html:164
#: report/templates/report/inventree_build_order_base.html:126
-#: templates/js/translated/build.js:2482 templates/js/translated/order.js:1476
-#: templates/js/translated/order.js:1762 templates/js/translated/order.js:2168
-#: templates/js/translated/order.js:3123 templates/js/translated/part.js:971
+#: templates/js/translated/build.js:2482 templates/js/translated/order.js:1583
+#: templates/js/translated/order.js:1869 templates/js/translated/order.js:2275
+#: templates/js/translated/order.js:3279 templates/js/translated/part.js:971
msgid "Target Date"
msgstr ""
@@ -1252,7 +1252,7 @@ msgstr ""
#: build/templates/build/build_base.html:156
#: build/templates/build/build_base.html:201
#: order/templates/order/order_base.html:98
-#: order/templates/order/sales_order_base.html:93
+#: order/templates/order/sales_order_base.html:94
#: templates/js/translated/table_filters.js:312
#: templates/js/translated/table_filters.js:353
#: templates/js/translated/table_filters.js:383
@@ -1261,20 +1261,20 @@ msgstr ""
#: build/templates/build/build_base.html:163
#: build/templates/build/detail.html:67 build/templates/build/detail.html:142
-#: order/templates/order/sales_order_base.html:170
+#: order/templates/order/sales_order_base.html:171
#: templates/js/translated/table_filters.js:392
msgid "Completed"
msgstr ""
#: build/templates/build/build_base.html:176
-#: build/templates/build/detail.html:94 order/models.py:1056
-#: order/models.py:1152 order/models.py:1251
+#: build/templates/build/detail.html:94 order/models.py:1069
+#: order/models.py:1165 order/models.py:1273
#: order/templates/order/sales_order_base.html:9
#: order/templates/order/sales_order_base.html:28
#: report/templates/report/inventree_build_order_base.html:136
#: report/templates/report/inventree_so_report.html:77
#: stock/templates/stock/item_base.html:297
-#: templates/js/translated/order.js:2107
+#: templates/js/translated/order.js:2214
msgid "Sales Order"
msgstr ""
@@ -1309,8 +1309,8 @@ msgstr ""
msgid "Stock can be taken from any available location."
msgstr ""
-#: build/templates/build/detail.html:49 order/models.py:992
-#: templates/js/translated/order.js:1199 templates/js/translated/order.js:1804
+#: build/templates/build/detail.html:49 order/models.py:1005
+#: templates/js/translated/order.js:1306 templates/js/translated/order.js:1911
msgid "Destination"
msgstr ""
@@ -1335,7 +1335,7 @@ msgstr ""
#: build/templates/build/detail.html:126
#: order/templates/order/order_base.html:149
-#: order/templates/order/sales_order_base.html:157
+#: order/templates/order/sales_order_base.html:158
#: templates/js/translated/build.js:2450
msgid "Created"
msgstr ""
@@ -1387,7 +1387,7 @@ msgstr ""
#: build/templates/build/detail.html:187
#: company/templates/company/detail.html:37
#: company/templates/company/detail.html:84
-#: part/templates/part/category.html:177 templates/js/translated/order.js:804
+#: part/templates/part/category.html:177 templates/js/translated/order.js:911
msgid "Order Parts"
msgstr ""
@@ -1462,6 +1462,8 @@ msgid "Completed Build Outputs"
msgstr ""
#: build/templates/build/detail.html:307 build/templates/build/sidebar.html:19
+#: company/templates/company/manufacturer_part.html:149
+#: company/templates/company/manufacturer_part_sidebar.html:7
#: order/templates/order/po_sidebar.html:9
#: order/templates/order/purchase_order_detail.html:82
#: order/templates/order/sales_order_detail.html:129
@@ -1515,23 +1517,23 @@ msgstr ""
msgid "Delete Build Order"
msgstr ""
-#: common/files.py:65
+#: common/files.py:66
msgid "Unsupported file format: {ext.upper()}"
msgstr ""
-#: common/files.py:67
+#: common/files.py:68
msgid "Error reading file (invalid encoding)"
msgstr ""
-#: common/files.py:72
+#: common/files.py:73
msgid "Error reading file (invalid format)"
msgstr ""
-#: common/files.py:74
+#: common/files.py:75
msgid "Error reading file (incorrect dimension)"
msgstr ""
-#: common/files.py:76
+#: common/files.py:77
msgid "Error reading file (data could be corrupted)"
msgstr ""
@@ -1552,856 +1554,888 @@ msgstr ""
msgid "Select {name} file to upload"
msgstr ""
-#: common/models.py:398
+#: common/models.py:394
msgid "Settings key (must be unique - case insensitive)"
msgstr ""
-#: common/models.py:400
+#: common/models.py:396
msgid "Settings value"
msgstr ""
-#: common/models.py:441
+#: common/models.py:437
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:461
+#: common/models.py:457
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:472
+#: common/models.py:468
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:521
+#: common/models.py:517
msgid "Key string must be unique"
msgstr ""
-#: common/models.py:743
+#: common/models.py:739
msgid "No group"
msgstr ""
-#: common/models.py:785
+#: common/models.py:781
msgid "Restart required"
msgstr ""
-#: common/models.py:786
+#: common/models.py:782
msgid "A setting has been changed which requires a server restart"
msgstr ""
-#: common/models.py:793
+#: common/models.py:789
msgid "Server Instance Name"
msgstr ""
-#: common/models.py:795
+#: common/models.py:791
msgid "String descriptor for the server instance"
msgstr ""
-#: common/models.py:799
+#: common/models.py:795
msgid "Use instance name"
msgstr ""
-#: common/models.py:800
+#: common/models.py:796
msgid "Use the instance name in the title-bar"
msgstr ""
-#: common/models.py:806
+#: common/models.py:802
msgid "Restrict showing `about`"
msgstr ""
-#: common/models.py:807
+#: common/models.py:803
msgid "Show the `about` modal only to superusers"
msgstr ""
-#: common/models.py:813 company/models.py:97 company/models.py:98
+#: common/models.py:809 company/models.py:92 company/models.py:93
msgid "Company name"
msgstr ""
-#: common/models.py:814
+#: common/models.py:810
msgid "Internal company name"
msgstr ""
-#: common/models.py:819
+#: common/models.py:815
msgid "Base URL"
msgstr ""
-#: common/models.py:820
+#: common/models.py:816
msgid "Base URL for server instance"
msgstr ""
-#: common/models.py:826
+#: common/models.py:822
msgid "Default Currency"
msgstr ""
-#: common/models.py:827
+#: common/models.py:823
msgid "Default currency"
msgstr ""
-#: common/models.py:833
+#: common/models.py:829
msgid "Download from URL"
msgstr ""
-#: common/models.py:834
+#: common/models.py:830
msgid "Allow download of remote images and files from external URL"
msgstr ""
-#: common/models.py:840 templates/InvenTree/settings/sidebar.html:33
+#: common/models.py:836 templates/InvenTree/settings/sidebar.html:33
msgid "Barcode Support"
msgstr ""
-#: common/models.py:841
+#: common/models.py:837
msgid "Enable barcode scanner support"
msgstr ""
-#: common/models.py:847
+#: common/models.py:843
msgid "Barcode Webcam Support"
msgstr ""
-#: common/models.py:848
+#: common/models.py:844
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/models.py:854
+#: common/models.py:850
msgid "IPN Regex"
msgstr ""
-#: common/models.py:855
+#: common/models.py:851
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/models.py:859
+#: common/models.py:855
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/models.py:860
+#: common/models.py:856
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/models.py:866
+#: common/models.py:862
msgid "Allow Editing IPN"
msgstr ""
-#: common/models.py:867
+#: common/models.py:863
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/models.py:873
+#: common/models.py:869
msgid "Copy Part BOM Data"
msgstr ""
-#: common/models.py:874
+#: common/models.py:870
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/models.py:880
+#: common/models.py:876
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/models.py:881
+#: common/models.py:877
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/models.py:887
+#: common/models.py:883
msgid "Copy Part Test Data"
msgstr ""
-#: common/models.py:888
+#: common/models.py:884
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/models.py:894
+#: common/models.py:890
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/models.py:895
+#: common/models.py:891
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/models.py:901 part/models.py:2593 report/models.py:180
+#: common/models.py:897 part/models.py:2581 report/models.py:175
#: templates/js/translated/table_filters.js:38
#: templates/js/translated/table_filters.js:444
msgid "Template"
msgstr ""
-#: common/models.py:902
+#: common/models.py:898
msgid "Parts are templates by default"
msgstr ""
-#: common/models.py:908 part/models.py:958 templates/js/translated/bom.js:1411
+#: common/models.py:904 part/models.py:946 templates/js/translated/bom.js:1411
#: templates/js/translated/table_filters.js:168
#: templates/js/translated/table_filters.js:460
msgid "Assembly"
msgstr ""
-#: common/models.py:909
+#: common/models.py:905
msgid "Parts can be assembled from other components by default"
msgstr ""
-#: common/models.py:915 part/models.py:964
+#: common/models.py:911 part/models.py:952
#: templates/js/translated/table_filters.js:464
msgid "Component"
msgstr ""
-#: common/models.py:916
+#: common/models.py:912
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/models.py:922 part/models.py:975
+#: common/models.py:918 part/models.py:963
msgid "Purchaseable"
msgstr ""
-#: common/models.py:923
+#: common/models.py:919
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/models.py:929 part/models.py:980
+#: common/models.py:925 part/models.py:968
#: templates/js/translated/table_filters.js:472
msgid "Salable"
msgstr ""
-#: common/models.py:930
+#: common/models.py:926
msgid "Parts are salable by default"
msgstr ""
-#: common/models.py:936 part/models.py:970
+#: common/models.py:932 part/models.py:958
#: templates/js/translated/table_filters.js:46
#: templates/js/translated/table_filters.js:100
#: templates/js/translated/table_filters.js:476
msgid "Trackable"
msgstr ""
-#: common/models.py:937
+#: common/models.py:933
msgid "Parts are trackable by default"
msgstr ""
-#: common/models.py:943 part/models.py:990
+#: common/models.py:939 part/models.py:978
#: part/templates/part/part_base.html:151
#: templates/js/translated/table_filters.js:42
msgid "Virtual"
msgstr ""
-#: common/models.py:944
+#: common/models.py:940
msgid "Parts are virtual by default"
msgstr ""
-#: common/models.py:950
+#: common/models.py:946
msgid "Show Import in Views"
msgstr ""
-#: common/models.py:951
+#: common/models.py:947
msgid "Display the import wizard in some part views"
msgstr ""
-#: common/models.py:957
+#: common/models.py:953
msgid "Show Price in Forms"
msgstr ""
-#: common/models.py:958
+#: common/models.py:954
msgid "Display part price in some forms"
msgstr ""
-#: common/models.py:969
+#: common/models.py:965
msgid "Show Price in BOM"
msgstr ""
-#: common/models.py:970
+#: common/models.py:966
msgid "Include pricing information in BOM tables"
msgstr ""
-#: common/models.py:981
+#: common/models.py:977
msgid "Show Price History"
msgstr ""
-#: common/models.py:982
+#: common/models.py:978
msgid "Display historical pricing for Part"
msgstr ""
-#: common/models.py:988
+#: common/models.py:984
msgid "Show related parts"
msgstr ""
-#: common/models.py:989
+#: common/models.py:985
msgid "Display related parts for a part"
msgstr ""
-#: common/models.py:995
+#: common/models.py:991
msgid "Create initial stock"
msgstr ""
-#: common/models.py:996
+#: common/models.py:992
msgid "Create initial stock on part creation"
msgstr ""
-#: common/models.py:1002
+#: common/models.py:998
msgid "Internal Prices"
msgstr ""
-#: common/models.py:1003
+#: common/models.py:999
msgid "Enable internal prices for parts"
msgstr ""
-#: common/models.py:1009
+#: common/models.py:1005
msgid "Internal Price as BOM-Price"
msgstr ""
-#: common/models.py:1010
+#: common/models.py:1006
msgid "Use the internal price (if set) in BOM-price calculations"
msgstr ""
-#: common/models.py:1016
+#: common/models.py:1012
msgid "Part Name Display Format"
msgstr ""
-#: common/models.py:1017
+#: common/models.py:1013
msgid "Format to display the part name"
msgstr ""
-#: common/models.py:1024
+#: common/models.py:1020
msgid "Enable Reports"
msgstr ""
-#: common/models.py:1025
+#: common/models.py:1021
msgid "Enable generation of reports"
msgstr ""
-#: common/models.py:1031 templates/stats.html:25
+#: common/models.py:1027 templates/stats.html:25
msgid "Debug Mode"
msgstr ""
-#: common/models.py:1032
+#: common/models.py:1028
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/models.py:1038
+#: common/models.py:1034
msgid "Page Size"
msgstr ""
-#: common/models.py:1039
+#: common/models.py:1035
msgid "Default page size for PDF reports"
msgstr ""
-#: common/models.py:1049
+#: common/models.py:1045
msgid "Test Reports"
msgstr ""
-#: common/models.py:1050
+#: common/models.py:1046
msgid "Enable generation of test reports"
msgstr ""
-#: common/models.py:1056
+#: common/models.py:1052
msgid "Batch Code Template"
msgstr ""
-#: common/models.py:1057
+#: common/models.py:1053
msgid "Template for generating default batch codes for stock items"
msgstr ""
-#: common/models.py:1062
+#: common/models.py:1058
msgid "Stock Expiry"
msgstr ""
-#: common/models.py:1063
+#: common/models.py:1059
msgid "Enable stock expiry functionality"
msgstr ""
-#: common/models.py:1069
+#: common/models.py:1065
msgid "Sell Expired Stock"
msgstr ""
-#: common/models.py:1070
+#: common/models.py:1066
msgid "Allow sale of expired stock"
msgstr ""
-#: common/models.py:1076
+#: common/models.py:1072
msgid "Stock Stale Time"
msgstr ""
-#: common/models.py:1077
+#: common/models.py:1073
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/models.py:1079
+#: common/models.py:1075
msgid "days"
msgstr ""
-#: common/models.py:1084
+#: common/models.py:1080
msgid "Build Expired Stock"
msgstr ""
-#: common/models.py:1085
+#: common/models.py:1081
msgid "Allow building with expired stock"
msgstr ""
-#: common/models.py:1091
+#: common/models.py:1087
msgid "Stock Ownership Control"
msgstr ""
-#: common/models.py:1092
+#: common/models.py:1088
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/models.py:1098
+#: common/models.py:1094
msgid "Build Order Reference Prefix"
msgstr ""
-#: common/models.py:1099
+#: common/models.py:1095
msgid "Prefix value for build order reference"
msgstr ""
-#: common/models.py:1104
+#: common/models.py:1100
msgid "Build Order Reference Regex"
msgstr ""
-#: common/models.py:1105
+#: common/models.py:1101
msgid "Regular expression pattern for matching build order reference"
msgstr ""
-#: common/models.py:1109
+#: common/models.py:1105
msgid "Sales Order Reference Prefix"
msgstr ""
-#: common/models.py:1110
+#: common/models.py:1106
msgid "Prefix value for sales order reference"
msgstr ""
-#: common/models.py:1115
+#: common/models.py:1111
+msgid "Sales Order Default Shipment"
+msgstr ""
+
+#: common/models.py:1112
+msgid "Enable creation of default shipment with sales orders"
+msgstr ""
+
+#: common/models.py:1118
msgid "Purchase Order Reference Prefix"
msgstr ""
-#: common/models.py:1116
+#: common/models.py:1119
msgid "Prefix value for purchase order reference"
msgstr ""
-#: common/models.py:1122
+#: common/models.py:1125
msgid "Enable password forgot"
msgstr ""
-#: common/models.py:1123
+#: common/models.py:1126
msgid "Enable password forgot function on the login pages"
msgstr ""
-#: common/models.py:1129
+#: common/models.py:1132
msgid "Enable registration"
msgstr ""
-#: common/models.py:1130
+#: common/models.py:1133
msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/models.py:1136
+#: common/models.py:1139
msgid "Enable SSO"
msgstr ""
-#: common/models.py:1137
+#: common/models.py:1140
msgid "Enable SSO on the login pages"
msgstr ""
-#: common/models.py:1143
+#: common/models.py:1146
msgid "Email required"
msgstr ""
-#: common/models.py:1144
+#: common/models.py:1147
msgid "Require user to supply mail on signup"
msgstr ""
-#: common/models.py:1150
+#: common/models.py:1153
msgid "Auto-fill SSO users"
msgstr ""
-#: common/models.py:1151
+#: common/models.py:1154
msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
-#: common/models.py:1157
+#: common/models.py:1160
msgid "Mail twice"
msgstr ""
-#: common/models.py:1158
+#: common/models.py:1161
msgid "On signup ask users twice for their mail"
msgstr ""
-#: common/models.py:1164
+#: common/models.py:1167
msgid "Password twice"
msgstr ""
-#: common/models.py:1165
+#: common/models.py:1168
msgid "On signup ask users twice for their password"
msgstr ""
-#: common/models.py:1171
+#: common/models.py:1174
msgid "Group on signup"
msgstr ""
-#: common/models.py:1172
+#: common/models.py:1175
msgid "Group to which new users are assigned on registration"
msgstr ""
-#: common/models.py:1178
+#: common/models.py:1181
msgid "Enforce MFA"
msgstr ""
-#: common/models.py:1179
+#: common/models.py:1182
msgid "Users must use multifactor security."
msgstr ""
-#: common/models.py:1185
+#: common/models.py:1188
msgid "Check plugins on startup"
msgstr ""
-#: common/models.py:1186
+#: common/models.py:1189
msgid "Check that all plugins are installed on startup - enable in container enviroments"
msgstr ""
-#: common/models.py:1194
+#: common/models.py:1197
msgid "Enable URL integration"
msgstr ""
-#: common/models.py:1195
+#: common/models.py:1198
msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/models.py:1202
+#: common/models.py:1205
msgid "Enable navigation integration"
msgstr ""
-#: common/models.py:1203
+#: common/models.py:1206
msgid "Enable plugins to integrate into navigation"
msgstr ""
-#: common/models.py:1210
+#: common/models.py:1213
msgid "Enable app integration"
msgstr ""
-#: common/models.py:1211
+#: common/models.py:1214
msgid "Enable plugins to add apps"
msgstr ""
-#: common/models.py:1218
+#: common/models.py:1221
msgid "Enable schedule integration"
msgstr ""
-#: common/models.py:1219
+#: common/models.py:1222
msgid "Enable plugins to run scheduled tasks"
msgstr ""
-#: common/models.py:1226
+#: common/models.py:1229
msgid "Enable event integration"
msgstr ""
-#: common/models.py:1227
+#: common/models.py:1230
msgid "Enable plugins to respond to internal events"
msgstr ""
-#: common/models.py:1242 common/models.py:1536
+#: common/models.py:1245 common/models.py:1560
msgid "Settings key (must be unique - case insensitive"
msgstr ""
-#: common/models.py:1273
+#: common/models.py:1276
msgid "Show subscribed parts"
msgstr ""
-#: common/models.py:1274
+#: common/models.py:1277
msgid "Show subscribed parts on the homepage"
msgstr ""
-#: common/models.py:1280
+#: common/models.py:1283
msgid "Show subscribed categories"
msgstr ""
-#: common/models.py:1281
+#: common/models.py:1284
msgid "Show subscribed part categories on the homepage"
msgstr ""
-#: common/models.py:1287
+#: common/models.py:1290
msgid "Show latest parts"
msgstr ""
-#: common/models.py:1288
+#: common/models.py:1291
msgid "Show latest parts on the homepage"
msgstr ""
-#: common/models.py:1294
+#: common/models.py:1297
msgid "Recent Part Count"
msgstr ""
-#: common/models.py:1295
+#: common/models.py:1298
msgid "Number of recent parts to display on index page"
msgstr ""
-#: common/models.py:1301
+#: common/models.py:1304
msgid "Show unvalidated BOMs"
msgstr ""
-#: common/models.py:1302
+#: common/models.py:1305
msgid "Show BOMs that await validation on the homepage"
msgstr ""
-#: common/models.py:1308
+#: common/models.py:1311
msgid "Show recent stock changes"
msgstr ""
-#: common/models.py:1309
+#: common/models.py:1312
msgid "Show recently changed stock items on the homepage"
msgstr ""
-#: common/models.py:1315
+#: common/models.py:1318
msgid "Recent Stock Count"
msgstr ""
-#: common/models.py:1316
+#: common/models.py:1319
msgid "Number of recent stock items to display on index page"
msgstr ""
-#: common/models.py:1322
+#: common/models.py:1325
msgid "Show low stock"
msgstr ""
-#: common/models.py:1323
+#: common/models.py:1326
msgid "Show low stock items on the homepage"
msgstr ""
-#: common/models.py:1329
+#: common/models.py:1332
msgid "Show depleted stock"
msgstr ""
-#: common/models.py:1330
+#: common/models.py:1333
msgid "Show depleted stock items on the homepage"
msgstr ""
-#: common/models.py:1336
+#: common/models.py:1339
msgid "Show needed stock"
msgstr ""
-#: common/models.py:1337
+#: common/models.py:1340
msgid "Show stock items needed for builds on the homepage"
msgstr ""
-#: common/models.py:1343
+#: common/models.py:1346
msgid "Show expired stock"
msgstr ""
-#: common/models.py:1344
+#: common/models.py:1347
msgid "Show expired stock items on the homepage"
msgstr ""
-#: common/models.py:1350
+#: common/models.py:1353
msgid "Show stale stock"
msgstr ""
-#: common/models.py:1351
+#: common/models.py:1354
msgid "Show stale stock items on the homepage"
msgstr ""
-#: common/models.py:1357
+#: common/models.py:1360
msgid "Show pending builds"
msgstr ""
-#: common/models.py:1358
+#: common/models.py:1361
msgid "Show pending builds on the homepage"
msgstr ""
-#: common/models.py:1364
+#: common/models.py:1367
msgid "Show overdue builds"
msgstr ""
-#: common/models.py:1365
+#: common/models.py:1368
msgid "Show overdue builds on the homepage"
msgstr ""
-#: common/models.py:1371
+#: common/models.py:1374
msgid "Show outstanding POs"
msgstr ""
-#: common/models.py:1372
+#: common/models.py:1375
msgid "Show outstanding POs on the homepage"
msgstr ""
-#: common/models.py:1378
+#: common/models.py:1381
msgid "Show overdue POs"
msgstr ""
-#: common/models.py:1379
+#: common/models.py:1382
msgid "Show overdue POs on the homepage"
msgstr ""
-#: common/models.py:1385
+#: common/models.py:1388
msgid "Show outstanding SOs"
msgstr ""
-#: common/models.py:1386
+#: common/models.py:1389
msgid "Show outstanding SOs on the homepage"
msgstr ""
-#: common/models.py:1392
+#: common/models.py:1395
msgid "Show overdue SOs"
msgstr ""
-#: common/models.py:1393
+#: common/models.py:1396
msgid "Show overdue SOs on the homepage"
msgstr ""
-#: common/models.py:1398
+#: common/models.py:1401
msgid "Enable label printing"
msgstr ""
-#: common/models.py:1399
+#: common/models.py:1402
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/models.py:1405
+#: common/models.py:1408
msgid "Inline label display"
msgstr ""
-#: common/models.py:1406
+#: common/models.py:1409
msgid "Display PDF labels in the browser, instead of downloading as a file"
msgstr ""
-#: common/models.py:1412
+#: common/models.py:1415
msgid "Inline report display"
msgstr ""
-#: common/models.py:1413
+#: common/models.py:1416
msgid "Display PDF reports in the browser, instead of downloading as a file"
msgstr ""
-#: common/models.py:1419
+#: common/models.py:1422
msgid "Search Parts"
msgstr ""
-#: common/models.py:1420
+#: common/models.py:1423
msgid "Display parts in search preview window"
msgstr ""
-#: common/models.py:1426
-msgid "Search Categories"
-msgstr ""
-
-#: common/models.py:1427
-msgid "Display part categories in search preview window"
-msgstr ""
-
-#: common/models.py:1433
-msgid "Search Stock"
-msgstr ""
-
-#: common/models.py:1434
-msgid "Display stock items in search preview window"
-msgstr ""
-
-#: common/models.py:1440
-msgid "Search Locations"
-msgstr ""
-
-#: common/models.py:1441
-msgid "Display stock locations in search preview window"
-msgstr ""
-
-#: common/models.py:1447
-msgid "Search Companies"
-msgstr ""
-
-#: common/models.py:1448
-msgid "Display companies in search preview window"
-msgstr ""
-
-#: common/models.py:1454
-msgid "Search Purchase Orders"
-msgstr ""
-
-#: common/models.py:1455
-msgid "Display purchase orders in search preview window"
-msgstr ""
-
-#: common/models.py:1461
-msgid "Search Sales Orders"
-msgstr ""
-
-#: common/models.py:1462
-msgid "Display sales orders in search preview window"
-msgstr ""
-
-#: common/models.py:1468
-msgid "Search Preview Results"
-msgstr ""
-
-#: common/models.py:1469
-msgid "Number of results to show in each section of the search preview window"
-msgstr ""
-
-#: common/models.py:1475
+#: common/models.py:1429
msgid "Hide Inactive Parts"
msgstr ""
-#: common/models.py:1476
-msgid "Hide inactive parts in search preview window"
+#: common/models.py:1430
+msgid "Excluded inactive parts from search preview window"
msgstr ""
-#: common/models.py:1482
+#: common/models.py:1436
+msgid "Search Categories"
+msgstr ""
+
+#: common/models.py:1437
+msgid "Display part categories in search preview window"
+msgstr ""
+
+#: common/models.py:1443
+msgid "Search Stock"
+msgstr ""
+
+#: common/models.py:1444
+msgid "Display stock items in search preview window"
+msgstr ""
+
+#: common/models.py:1450
+msgid "Hide Unavailable Stock Items"
+msgstr ""
+
+#: common/models.py:1451
+msgid "Exclude stock items which are not available from the search preview window"
+msgstr ""
+
+#: common/models.py:1457
+msgid "Search Locations"
+msgstr ""
+
+#: common/models.py:1458
+msgid "Display stock locations in search preview window"
+msgstr ""
+
+#: common/models.py:1464
+msgid "Search Companies"
+msgstr ""
+
+#: common/models.py:1465
+msgid "Display companies in search preview window"
+msgstr ""
+
+#: common/models.py:1471
+msgid "Search Purchase Orders"
+msgstr ""
+
+#: common/models.py:1472
+msgid "Display purchase orders in search preview window"
+msgstr ""
+
+#: common/models.py:1478
+msgid "Exclude Inactive Purchase Orders"
+msgstr ""
+
+#: common/models.py:1479
+msgid "Exclude inactive purchase orders from search preview window"
+msgstr ""
+
+#: common/models.py:1485
+msgid "Search Sales Orders"
+msgstr ""
+
+#: common/models.py:1486
+msgid "Display sales orders in search preview window"
+msgstr ""
+
+#: common/models.py:1492
+msgid "Exclude Inactive Sales Orders"
+msgstr ""
+
+#: common/models.py:1493
+msgid "Exclude inactive sales orders from search preview window"
+msgstr ""
+
+#: common/models.py:1499
+msgid "Search Preview Results"
+msgstr ""
+
+#: common/models.py:1500
+msgid "Number of results to show in each section of the search preview window"
+msgstr ""
+
+#: common/models.py:1506
msgid "Show Quantity in Forms"
msgstr ""
-#: common/models.py:1483
+#: common/models.py:1507
msgid "Display available part quantity in some forms"
msgstr ""
-#: common/models.py:1489
+#: common/models.py:1513
msgid "Escape Key Closes Forms"
msgstr ""
-#: common/models.py:1490
+#: common/models.py:1514
msgid "Use the escape key to close modal forms"
msgstr ""
-#: common/models.py:1496
+#: common/models.py:1520
msgid "Fixed Navbar"
msgstr ""
-#: common/models.py:1497
+#: common/models.py:1521
msgid "The navbar position is fixed to the top of the screen"
msgstr ""
-#: common/models.py:1503
+#: common/models.py:1527
msgid "Date Format"
msgstr ""
-#: common/models.py:1504
+#: common/models.py:1528
msgid "Preferred format for displaying dates"
msgstr ""
-#: common/models.py:1518 part/templates/part/detail.html:39
+#: common/models.py:1542 part/templates/part/detail.html:39
msgid "Part Scheduling"
msgstr ""
-#: common/models.py:1519
+#: common/models.py:1543
msgid "Display part scheduling information"
msgstr ""
-#: common/models.py:1587 company/forms.py:40
+#: common/models.py:1611 company/forms.py:39
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1594 company/serializers.py:264
-#: company/templates/company/supplier_part.html:263 order/models.py:904
+#: common/models.py:1618 company/serializers.py:285
+#: company/templates/company/supplier_part.html:263 order/models.py:917
#: templates/js/translated/part.js:998 templates/js/translated/part.js:1974
msgid "Price"
msgstr ""
-#: common/models.py:1595
+#: common/models.py:1619
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1752 common/models.py:1889
+#: common/models.py:1779 common/models.py:1916
msgid "Endpoint"
msgstr ""
-#: common/models.py:1753
+#: common/models.py:1780
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1762
+#: common/models.py:1789
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1767 part/models.py:985 plugin/models.py:106
+#: common/models.py:1794 part/models.py:973 plugin/models.py:105
#: templates/js/translated/table_filters.js:34
#: templates/js/translated/table_filters.js:96
#: templates/js/translated/table_filters.js:308
@@ -2409,79 +2443,79 @@ msgstr ""
msgid "Active"
msgstr ""
-#: common/models.py:1768
+#: common/models.py:1795
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1782
+#: common/models.py:1809
msgid "Token"
msgstr ""
-#: common/models.py:1783
+#: common/models.py:1810
msgid "Token for access"
msgstr ""
-#: common/models.py:1790
+#: common/models.py:1817
msgid "Secret"
msgstr ""
-#: common/models.py:1791
+#: common/models.py:1818
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1856
+#: common/models.py:1883
msgid "Message ID"
msgstr ""
-#: common/models.py:1857
+#: common/models.py:1884
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1865
+#: common/models.py:1892
msgid "Host"
msgstr ""
-#: common/models.py:1866
+#: common/models.py:1893
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1873
+#: common/models.py:1900
msgid "Header"
msgstr ""
-#: common/models.py:1874
+#: common/models.py:1901
msgid "Header of this message"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1907
msgid "Body"
msgstr ""
-#: common/models.py:1881
+#: common/models.py:1908
msgid "Body of this message"
msgstr ""
-#: common/models.py:1890
+#: common/models.py:1917
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1895
+#: common/models.py:1922
msgid "Worked on"
msgstr ""
-#: common/models.py:1896
+#: common/models.py:1923
msgid "Was the work on this message finished?"
msgstr ""
#: common/views.py:90 order/templates/order/purchase_order_detail.html:23
-#: order/views.py:119 part/views.py:205
+#: order/views.py:115 part/views.py:194
#: templates/patterns/wizard/upload.html:37
msgid "Upload File"
msgstr ""
-#: common/views.py:91 order/views.py:120
+#: common/views.py:91 order/views.py:116
#: part/templates/part/import_wizard/ajax_match_fields.html:45
-#: part/views.py:206 templates/patterns/wizard/match_fields.html:51
+#: part/views.py:195 templates/patterns/wizard/match_fields.html:51
msgid "Match Fields"
msgstr ""
@@ -2504,118 +2538,118 @@ msgstr ""
msgid "Previous Step"
msgstr ""
-#: company/forms.py:21 part/forms.py:43
+#: company/forms.py:20 part/forms.py:41
#: templates/InvenTree/settings/mixins/urls.html:14
msgid "URL"
msgstr ""
-#: company/forms.py:22 part/forms.py:44
+#: company/forms.py:21 part/forms.py:42
msgid "Image URL"
msgstr ""
-#: company/models.py:102
+#: company/models.py:97
msgid "Company description"
msgstr ""
-#: company/models.py:103
+#: company/models.py:98
msgid "Description of the company"
msgstr ""
-#: company/models.py:109 company/templates/company/company_base.html:100
+#: company/models.py:104 company/templates/company/company_base.html:100
#: templates/InvenTree/settings/plugin_settings.html:55
#: templates/js/translated/company.js:349
msgid "Website"
msgstr ""
-#: company/models.py:110
+#: company/models.py:105
msgid "Company website URL"
msgstr ""
-#: company/models.py:114 company/templates/company/company_base.html:118
+#: company/models.py:109 company/templates/company/company_base.html:118
msgid "Address"
msgstr ""
-#: company/models.py:115
+#: company/models.py:110
msgid "Company address"
msgstr ""
-#: company/models.py:118
+#: company/models.py:113
msgid "Phone number"
msgstr ""
-#: company/models.py:119
+#: company/models.py:114
msgid "Contact phone number"
msgstr ""
-#: company/models.py:122 company/templates/company/company_base.html:132
+#: company/models.py:117 company/templates/company/company_base.html:132
#: templates/InvenTree/settings/user.html:48
msgid "Email"
msgstr ""
-#: company/models.py:122
+#: company/models.py:117
msgid "Contact email address"
msgstr ""
-#: company/models.py:125 company/templates/company/company_base.html:139
+#: company/models.py:120 company/templates/company/company_base.html:139
msgid "Contact"
msgstr ""
-#: company/models.py:126
+#: company/models.py:121
msgid "Point of contact"
msgstr ""
-#: company/models.py:128
+#: company/models.py:123
msgid "Link to external company information"
msgstr ""
-#: company/models.py:136 part/models.py:877
+#: company/models.py:131 part/models.py:865
msgid "Image"
msgstr ""
-#: company/models.py:141
+#: company/models.py:136
msgid "is customer"
msgstr ""
-#: company/models.py:141
+#: company/models.py:136
msgid "Do you sell items to this company?"
msgstr ""
-#: company/models.py:143
+#: company/models.py:138
msgid "is supplier"
msgstr ""
-#: company/models.py:143
+#: company/models.py:138
msgid "Do you purchase items from this company?"
msgstr ""
-#: company/models.py:145
+#: company/models.py:140
msgid "is manufacturer"
msgstr ""
-#: company/models.py:145
+#: company/models.py:140
msgid "Does this company manufacture parts?"
msgstr ""
-#: company/models.py:149 company/serializers.py:270
-#: company/templates/company/company_base.html:106 part/serializers.py:156
-#: part/serializers.py:188 stock/serializers.py:176
+#: company/models.py:144 company/serializers.py:291
+#: company/templates/company/company_base.html:106 part/serializers.py:151
+#: part/serializers.py:183 stock/serializers.py:168
msgid "Currency"
msgstr ""
-#: company/models.py:152
+#: company/models.py:147
msgid "Default currency used for this company"
msgstr ""
-#: company/models.py:314 company/models.py:529 stock/models.py:616
+#: company/models.py:309 company/models.py:540 stock/models.py:607
#: stock/templates/stock/item_base.html:148 templates/js/translated/bom.js:542
msgid "Base Part"
msgstr ""
-#: company/models.py:318 company/models.py:533
+#: company/models.py:313 company/models.py:544
msgid "Select part"
msgstr ""
-#: company/models.py:329 company/templates/company/company_base.html:76
+#: company/models.py:324 company/templates/company/company_base.html:76
#: company/templates/company/manufacturer_part.html:90
#: company/templates/company/supplier_part.html:103
#: stock/templates/stock/item_base.html:370
@@ -2626,146 +2660,146 @@ msgstr ""
msgid "Manufacturer"
msgstr ""
-#: company/models.py:330 templates/js/translated/part.js:236
+#: company/models.py:325 templates/js/translated/part.js:236
msgid "Select manufacturer"
msgstr ""
-#: company/models.py:336 company/templates/company/manufacturer_part.html:102
+#: company/models.py:331 company/templates/company/manufacturer_part.html:101
#: company/templates/company/supplier_part.html:111
#: templates/js/translated/company.js:533
-#: templates/js/translated/company.js:818 templates/js/translated/order.js:1682
+#: templates/js/translated/company.js:818 templates/js/translated/order.js:1789
#: templates/js/translated/part.js:246 templates/js/translated/part.js:956
msgid "MPN"
msgstr ""
-#: company/models.py:337 templates/js/translated/part.js:247
+#: company/models.py:332 templates/js/translated/part.js:247
msgid "Manufacturer Part Number"
msgstr ""
-#: company/models.py:343
+#: company/models.py:338
msgid "URL for external manufacturer part link"
msgstr ""
-#: company/models.py:349
+#: company/models.py:344
msgid "Manufacturer part description"
msgstr ""
-#: company/models.py:403 company/models.py:552
+#: company/models.py:391 company/models.py:414 company/models.py:563
#: company/templates/company/manufacturer_part.html:7
#: company/templates/company/manufacturer_part.html:24
#: stock/templates/stock/item_base.html:380
msgid "Manufacturer Part"
msgstr ""
-#: company/models.py:410
+#: company/models.py:421
msgid "Parameter name"
msgstr ""
-#: company/models.py:416
+#: company/models.py:427
#: report/templates/report/inventree_test_report_base.html:95
-#: stock/models.py:2204 templates/js/translated/company.js:647
+#: stock/models.py:2195 templates/js/translated/company.js:647
#: templates/js/translated/part.js:776 templates/js/translated/stock.js:1304
msgid "Value"
msgstr ""
-#: company/models.py:417
+#: company/models.py:428
msgid "Parameter value"
msgstr ""
-#: company/models.py:423 part/models.py:952 part/models.py:2561
+#: company/models.py:434 part/models.py:940 part/models.py:2549
#: part/templates/part/part_base.html:280
#: templates/InvenTree/settings/settings.html:332
#: templates/js/translated/company.js:653 templates/js/translated/part.js:782
msgid "Units"
msgstr ""
-#: company/models.py:424
+#: company/models.py:435
msgid "Parameter units"
msgstr ""
-#: company/models.py:496
+#: company/models.py:507
msgid "Linked manufacturer part must reference the same base part"
msgstr ""
-#: company/models.py:539 company/templates/company/company_base.html:81
-#: company/templates/company/supplier_part.html:87 order/models.py:254
+#: company/models.py:550 company/templates/company/company_base.html:81
+#: company/templates/company/supplier_part.html:87 order/models.py:252
#: order/templates/order/order_base.html:112 part/bom.py:237 part/bom.py:265
#: stock/templates/stock/item_base.html:387
#: templates/js/translated/company.js:337
-#: templates/js/translated/company.js:774 templates/js/translated/order.js:1442
+#: templates/js/translated/company.js:774 templates/js/translated/order.js:1549
#: templates/js/translated/part.js:216 templates/js/translated/part.js:924
#: templates/js/translated/table_filters.js:415
msgid "Supplier"
msgstr ""
-#: company/models.py:540 templates/js/translated/part.js:217
+#: company/models.py:551 templates/js/translated/part.js:217
msgid "Select supplier"
msgstr ""
-#: company/models.py:545 company/templates/company/supplier_part.html:97
-#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1669
+#: company/models.py:556 company/templates/company/supplier_part.html:97
+#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1776
#: templates/js/translated/part.js:227 templates/js/translated/part.js:942
msgid "SKU"
msgstr ""
-#: company/models.py:546 templates/js/translated/part.js:228
+#: company/models.py:557 templates/js/translated/part.js:228
msgid "Supplier stock keeping unit"
msgstr ""
-#: company/models.py:553
+#: company/models.py:564
msgid "Select manufacturer part"
msgstr ""
-#: company/models.py:559
+#: company/models.py:570
msgid "URL for external supplier part link"
msgstr ""
-#: company/models.py:565
+#: company/models.py:576
msgid "Supplier part description"
msgstr ""
-#: company/models.py:570 company/templates/company/supplier_part.html:125
-#: part/models.py:2800 part/templates/part/upload_bom.html:59
+#: company/models.py:581 company/templates/company/supplier_part.html:125
+#: part/models.py:2788 part/templates/part/upload_bom.html:59
#: report/templates/report/inventree_po_report.html:92
-#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:406
+#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:398
msgid "Note"
msgstr ""
-#: company/models.py:574 part/models.py:1870
+#: company/models.py:585 part/models.py:1858
msgid "base cost"
msgstr ""
-#: company/models.py:574 part/models.py:1870
+#: company/models.py:585 part/models.py:1858
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:576 company/templates/company/supplier_part.html:118
-#: stock/models.py:640 stock/templates/stock/item_base.html:328
+#: company/models.py:587 company/templates/company/supplier_part.html:118
+#: stock/models.py:631 stock/templates/stock/item_base.html:328
#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1918
msgid "Packaging"
msgstr ""
-#: company/models.py:576
+#: company/models.py:587
msgid "Part packaging"
msgstr ""
-#: company/models.py:578 part/models.py:1872
+#: company/models.py:589 part/models.py:1860
msgid "multiple"
msgstr ""
-#: company/models.py:578
+#: company/models.py:589
msgid "Order multiple"
msgstr ""
-#: company/models.py:702
+#: company/models.py:713
msgid "last updated"
msgstr ""
-#: company/serializers.py:70
+#: company/serializers.py:68
msgid "Default currency used for this supplier"
msgstr ""
-#: company/serializers.py:71
+#: company/serializers.py:69
msgid "Currency Code"
msgstr ""
@@ -2776,7 +2810,7 @@ msgid "Company"
msgstr ""
#: company/templates/company/company_base.html:22
-#: templates/js/translated/order.js:415
+#: templates/js/translated/order.js:522
msgid "Create Purchase Order"
msgstr ""
@@ -2812,11 +2846,11 @@ msgstr ""
msgid "Download image from URL"
msgstr ""
-#: company/templates/company/company_base.html:86 order/models.py:602
-#: order/templates/order/sales_order_base.html:115 stock/models.py:659
-#: stock/models.py:660 stock/serializers.py:722
+#: company/templates/company/company_base.html:86 order/models.py:600
+#: order/templates/order/sales_order_base.html:116 stock/models.py:650
+#: stock/models.py:651 stock/serializers.py:714
#: stock/templates/stock/item_base.html:280
-#: templates/js/translated/company.js:329 templates/js/translated/order.js:2129
+#: templates/js/translated/company.js:329 templates/js/translated/order.js:2236
#: templates/js/translated/stock.js:2436
#: templates/js/translated/table_filters.js:419
msgid "Customer"
@@ -2836,7 +2870,7 @@ msgid "Upload Image"
msgstr ""
#: company/templates/company/detail.html:14
-#: company/templates/company/manufacturer_part_sidebar.html:7
+#: company/templates/company/manufacturer_part_sidebar.html:9
#: templates/InvenTree/search.html:118
msgid "Supplier Parts"
msgstr ""
@@ -2846,15 +2880,15 @@ msgid "Create new supplier part"
msgstr ""
#: company/templates/company/detail.html:19
-#: company/templates/company/manufacturer_part.html:124
+#: company/templates/company/manufacturer_part.html:123
#: part/templates/part/detail.html:352
msgid "New Supplier Part"
msgstr ""
#: company/templates/company/detail.html:31
#: company/templates/company/detail.html:78
-#: company/templates/company/manufacturer_part.html:133
-#: company/templates/company/manufacturer_part.html:163
+#: company/templates/company/manufacturer_part.html:132
+#: company/templates/company/manufacturer_part.html:177
#: part/templates/part/category.html:168 part/templates/part/detail.html:361
#: part/templates/part/detail.html:390
msgid "Options"
@@ -2901,8 +2935,8 @@ msgstr ""
#: part/templates/part/detail.html:77 part/templates/part/part_sidebar.html:37
#: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197
#: templates/InvenTree/settings/sidebar.html:47
-#: templates/js/translated/search.js:173 templates/navbar.html:50
-#: users/models.py:45
+#: templates/js/translated/search.js:190 templates/navbar.html:50
+#: users/models.py:43
msgid "Purchase Orders"
msgstr ""
@@ -2924,8 +2958,8 @@ msgstr ""
#: part/templates/part/detail.html:100 part/templates/part/part_sidebar.html:41
#: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217
#: templates/InvenTree/settings/sidebar.html:49
-#: templates/js/translated/search.js:190 templates/navbar.html:61
-#: users/models.py:46
+#: templates/js/translated/search.js:214 templates/navbar.html:61
+#: users/models.py:44
msgid "Sales Orders"
msgstr ""
@@ -2949,13 +2983,13 @@ msgid "Company Notes"
msgstr ""
#: company/templates/company/detail.html:375
-#: company/templates/company/manufacturer_part.html:222
+#: company/templates/company/manufacturer_part.html:264
#: part/templates/part/detail.html:451
msgid "Delete Supplier Parts?"
msgstr ""
#: company/templates/company/detail.html:376
-#: company/templates/company/manufacturer_part.html:223
+#: company/templates/company/manufacturer_part.html:265
#: part/templates/part/detail.html:452
msgid "All selected supplier parts will be deleted"
msgstr ""
@@ -2964,7 +2998,7 @@ msgstr ""
msgid "Supplier List"
msgstr ""
-#: company/templates/company/manufacturer_part.html:15 company/views.py:52
+#: company/templates/company/manufacturer_part.html:15 company/views.py:47
#: part/templates/part/prices.html:170 templates/InvenTree/search.html:178
#: templates/navbar.html:49
msgid "Manufacturers"
@@ -2996,55 +3030,55 @@ msgstr ""
msgid "No manufacturer information available"
msgstr ""
-#: company/templates/company/manufacturer_part.html:120
-#: company/templates/company/supplier_part.html:15 company/views.py:46
+#: company/templates/company/manufacturer_part.html:119
+#: company/templates/company/supplier_part.html:15 company/views.py:41
#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:166
#: templates/InvenTree/search.html:188 templates/navbar.html:48
msgid "Suppliers"
msgstr ""
-#: company/templates/company/manufacturer_part.html:135
+#: company/templates/company/manufacturer_part.html:134
#: part/templates/part/detail.html:363
msgid "Delete supplier parts"
msgstr ""
-#: company/templates/company/manufacturer_part.html:135
-#: company/templates/company/manufacturer_part.html:165
-#: company/templates/company/manufacturer_part.html:261
+#: company/templates/company/manufacturer_part.html:134
+#: company/templates/company/manufacturer_part.html:179
+#: company/templates/company/manufacturer_part.html:303
#: part/templates/part/detail.html:363 part/templates/part/detail.html:392
#: templates/js/translated/bom.js:699 templates/js/translated/company.js:426
-#: templates/js/translated/helpers.js:32 users/models.py:221
+#: templates/js/translated/helpers.js:32 users/models.py:220
msgid "Delete"
msgstr ""
-#: company/templates/company/manufacturer_part.html:150
+#: company/templates/company/manufacturer_part.html:164
#: company/templates/company/manufacturer_part_sidebar.html:5
#: part/templates/part/category_sidebar.html:19
#: part/templates/part/detail.html:179 part/templates/part/part_sidebar.html:8
msgid "Parameters"
msgstr ""
-#: company/templates/company/manufacturer_part.html:154
+#: company/templates/company/manufacturer_part.html:168
#: part/templates/part/detail.html:184
#: templates/InvenTree/settings/category.html:12
#: templates/InvenTree/settings/part.html:66
msgid "New Parameter"
msgstr ""
-#: company/templates/company/manufacturer_part.html:165
+#: company/templates/company/manufacturer_part.html:179
msgid "Delete parameters"
msgstr ""
-#: company/templates/company/manufacturer_part.html:198
+#: company/templates/company/manufacturer_part.html:240
#: part/templates/part/detail.html:853
msgid "Add Parameter"
msgstr ""
-#: company/templates/company/manufacturer_part.html:246
+#: company/templates/company/manufacturer_part.html:288
msgid "Selected parameters will be deleted"
msgstr ""
-#: company/templates/company/manufacturer_part.html:258
+#: company/templates/company/manufacturer_part.html:300
msgid "Delete Parameters"
msgstr ""
@@ -3065,9 +3099,9 @@ msgid "Assigned Stock Items"
msgstr ""
#: company/templates/company/supplier_part.html:7
-#: company/templates/company/supplier_part.html:24 stock/models.py:624
+#: company/templates/company/supplier_part.html:24 stock/models.py:615
#: stock/templates/stock/item_base.html:396
-#: templates/js/translated/company.js:790 templates/js/translated/order.js:762
+#: templates/js/translated/company.js:790 templates/js/translated/order.js:869
#: templates/js/translated/stock.js:1875
msgid "Supplier Part"
msgstr ""
@@ -3183,537 +3217,533 @@ msgstr ""
#: stock/templates/stock/location.html:161
#: stock/templates/stock/location.html:173
#: stock/templates/stock/location_sidebar.html:7
-#: templates/InvenTree/search.html:152 templates/js/translated/search.js:127
-#: templates/js/translated/stock.js:2312 users/models.py:43
+#: templates/InvenTree/search.html:152 templates/js/translated/search.js:138
+#: templates/js/translated/stock.js:2312 users/models.py:41
msgid "Stock Items"
msgstr ""
-#: company/views.py:47
+#: company/views.py:42
msgid "New Supplier"
msgstr ""
-#: company/views.py:53
+#: company/views.py:48
msgid "New Manufacturer"
msgstr ""
-#: company/views.py:58 templates/InvenTree/search.html:208
+#: company/views.py:53 templates/InvenTree/search.html:208
#: templates/navbar.html:60
msgid "Customers"
msgstr ""
-#: company/views.py:59
+#: company/views.py:54
msgid "New Customer"
msgstr ""
-#: company/views.py:66 templates/js/translated/search.js:159
+#: company/views.py:61 templates/js/translated/search.js:167
msgid "Companies"
msgstr ""
-#: company/views.py:67
+#: company/views.py:62
msgid "New Company"
msgstr ""
-#: company/views.py:126 part/views.py:590
+#: company/views.py:121 part/views.py:579
msgid "Download Image"
msgstr ""
-#: company/views.py:155 part/views.py:622
+#: company/views.py:150 part/views.py:611
msgid "Image size exceeds maximum allowable size for download"
msgstr ""
-#: company/views.py:162 part/views.py:629
+#: company/views.py:157 part/views.py:618
#, python-brace-format
msgid "Invalid response: {code}"
msgstr ""
-#: company/views.py:171 part/views.py:638
+#: company/views.py:166 part/views.py:627
msgid "Supplied URL is not a valid image file"
msgstr ""
-#: label/api.py:94 report/api.py:201
-msgid "No valid objects provided to template"
-msgstr ""
-
-#: label/models.py:110
+#: label/models.py:105
msgid "Label name"
msgstr ""
-#: label/models.py:117
+#: label/models.py:112
msgid "Label description"
msgstr ""
-#: label/models.py:124
+#: label/models.py:119
msgid "Label"
msgstr ""
-#: label/models.py:125
+#: label/models.py:120
msgid "Label template file"
msgstr ""
-#: label/models.py:131 report/models.py:291
+#: label/models.py:126 report/models.py:286
msgid "Enabled"
msgstr ""
-#: label/models.py:132
+#: label/models.py:127
msgid "Label template is enabled"
msgstr ""
-#: label/models.py:137
+#: label/models.py:132
msgid "Width [mm]"
msgstr ""
-#: label/models.py:138
+#: label/models.py:133
msgid "Label width, specified in mm"
msgstr ""
-#: label/models.py:144
+#: label/models.py:139
msgid "Height [mm]"
msgstr ""
-#: label/models.py:145
+#: label/models.py:140
msgid "Label height, specified in mm"
msgstr ""
-#: label/models.py:151 report/models.py:284
+#: label/models.py:146 report/models.py:279
msgid "Filename Pattern"
msgstr ""
-#: label/models.py:152
+#: label/models.py:147
msgid "Pattern for generating label filenames"
msgstr ""
-#: label/models.py:255
+#: label/models.py:250
msgid "Query filters (comma-separated list of key=value pairs),"
msgstr ""
-#: label/models.py:256 label/models.py:316 label/models.py:363
-#: report/models.py:315 report/models.py:452 report/models.py:491
+#: label/models.py:251 label/models.py:295 label/models.py:327
+#: report/models.py:310 report/models.py:447 report/models.py:486
msgid "Filters"
msgstr ""
-#: label/models.py:315
+#: label/models.py:294
msgid "Query filters (comma-separated list of key=value pairs"
msgstr ""
-#: label/models.py:362
+#: label/models.py:326
msgid "Part query filters (comma-separated value of key=value pairs)"
msgstr ""
-#: order/models.py:132
+#: order/models.py:130
msgid "Order description"
msgstr ""
-#: order/models.py:134
+#: order/models.py:132
msgid "Link to external page"
msgstr ""
-#: order/models.py:142
+#: order/models.py:140
msgid "Created By"
msgstr ""
-#: order/models.py:149
+#: order/models.py:147
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:154
+#: order/models.py:152
msgid "Order notes"
msgstr ""
-#: order/models.py:240 order/models.py:592
+#: order/models.py:238 order/models.py:590
msgid "Order reference"
msgstr ""
-#: order/models.py:245 order/models.py:607
+#: order/models.py:243 order/models.py:605
msgid "Purchase order status"
msgstr ""
-#: order/models.py:255
+#: order/models.py:253
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:258 order/templates/order/order_base.html:124
-#: templates/js/translated/order.js:1451
+#: order/models.py:256 order/templates/order/order_base.html:124
+#: templates/js/translated/order.js:1558
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:258
+#: order/models.py:256
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:265
+#: order/models.py:263
msgid "received by"
msgstr ""
-#: order/models.py:270
+#: order/models.py:268
msgid "Issue Date"
msgstr ""
-#: order/models.py:271
+#: order/models.py:269
msgid "Date order was issued"
msgstr ""
-#: order/models.py:276
+#: order/models.py:274
msgid "Target Delivery Date"
msgstr ""
-#: order/models.py:277
+#: order/models.py:275
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:283
+#: order/models.py:281
msgid "Date order was completed"
msgstr ""
-#: order/models.py:312
+#: order/models.py:310
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:458
+#: order/models.py:456
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:603
+#: order/models.py:601
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:609
+#: order/models.py:607
msgid "Customer Reference "
msgstr ""
-#: order/models.py:609
+#: order/models.py:607
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:614
+#: order/models.py:612
msgid "Target date for order completion. Order will be overdue after this date."
msgstr ""
-#: order/models.py:617 order/models.py:1157
-#: templates/js/translated/order.js:2176 templates/js/translated/order.js:2327
+#: order/models.py:615 order/models.py:1170
+#: templates/js/translated/order.js:2283 templates/js/translated/order.js:2434
msgid "Shipment Date"
msgstr ""
-#: order/models.py:624
+#: order/models.py:622
msgid "shipped by"
msgstr ""
-#: order/models.py:690
+#: order/models.py:688
msgid "Order cannot be completed as no parts have been assigned"
msgstr ""
-#: order/models.py:694
+#: order/models.py:692
msgid "Only a pending order can be marked as complete"
msgstr ""
-#: order/models.py:697
+#: order/models.py:695
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:700
+#: order/models.py:698
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:865
+#: order/models.py:878
msgid "Item quantity"
msgstr ""
-#: order/models.py:871
+#: order/models.py:884
msgid "Line item reference"
msgstr ""
-#: order/models.py:873
+#: order/models.py:886
msgid "Line item notes"
msgstr ""
-#: order/models.py:878
+#: order/models.py:891
msgid "Target shipping date for this line item"
msgstr ""
-#: order/models.py:896
+#: order/models.py:909
msgid "Context"
msgstr ""
-#: order/models.py:897
+#: order/models.py:910
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:905
+#: order/models.py:918
msgid "Unit price"
msgstr ""
-#: order/models.py:938
+#: order/models.py:951
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:945
+#: order/models.py:958
msgid "deleted"
msgstr ""
-#: order/models.py:951 order/models.py:1033 order/models.py:1055
-#: order/models.py:1151 order/models.py:1251
-#: templates/js/translated/order.js:2718
+#: order/models.py:964 order/models.py:1046 order/models.py:1068
+#: order/models.py:1164 order/models.py:1273
+#: templates/js/translated/order.js:2874
msgid "Order"
msgstr ""
-#: order/models.py:952 order/models.py:1033
+#: order/models.py:965 order/models.py:1046
#: order/templates/order/order_base.html:9
#: order/templates/order/order_base.html:18
#: report/templates/report/inventree_po_report.html:76
#: stock/templates/stock/item_base.html:342
-#: templates/js/translated/order.js:763 templates/js/translated/order.js:1420
+#: templates/js/translated/order.js:870 templates/js/translated/order.js:1527
#: templates/js/translated/part.js:899 templates/js/translated/stock.js:1852
#: templates/js/translated/stock.js:2417
msgid "Purchase Order"
msgstr ""
-#: order/models.py:971
+#: order/models.py:984
msgid "Supplier part"
msgstr ""
-#: order/models.py:978 order/templates/order/order_base.html:169
-#: templates/js/translated/order.js:1196 templates/js/translated/order.js:1784
+#: order/models.py:991 order/templates/order/order_base.html:169
+#: templates/js/translated/order.js:1303 templates/js/translated/order.js:1891
#: templates/js/translated/part.js:993 templates/js/translated/part.js:1020
#: templates/js/translated/table_filters.js:330
msgid "Received"
msgstr ""
-#: order/models.py:979
+#: order/models.py:992
msgid "Number of items received"
msgstr ""
-#: order/models.py:986 part/templates/part/prices.html:179 stock/models.py:754
-#: stock/serializers.py:167 stock/templates/stock/item_base.html:349
+#: order/models.py:999 part/templates/part/prices.html:179 stock/models.py:745
+#: stock/serializers.py:159 stock/templates/stock/item_base.html:349
#: templates/js/translated/stock.js:1906
msgid "Purchase Price"
msgstr ""
-#: order/models.py:987
+#: order/models.py:1000
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:995
+#: order/models.py:1008
msgid "Where does the Purchaser want this item to be stored?"
msgstr ""
-#: order/models.py:1065 part/templates/part/part_pricing.html:112
+#: order/models.py:1078 part/templates/part/part_pricing.html:112
#: part/templates/part/prices.html:119 part/templates/part/prices.html:288
msgid "Sale Price"
msgstr ""
-#: order/models.py:1066
+#: order/models.py:1079
msgid "Unit sale price"
msgstr ""
-#: order/models.py:1071
+#: order/models.py:1084
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:1158
+#: order/models.py:1171
msgid "Date of shipment"
msgstr ""
-#: order/models.py:1165
+#: order/models.py:1178
msgid "Checked By"
msgstr ""
-#: order/models.py:1166
+#: order/models.py:1179
msgid "User who checked this shipment"
msgstr ""
-#: order/models.py:1174
+#: order/models.py:1187
msgid "Shipment number"
msgstr ""
-#: order/models.py:1181
+#: order/models.py:1194
msgid "Shipment notes"
msgstr ""
-#: order/models.py:1188
+#: order/models.py:1201
msgid "Tracking Number"
msgstr ""
-#: order/models.py:1189
+#: order/models.py:1202
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:1199
+#: order/models.py:1213
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:1202
+#: order/models.py:1216
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:1289 order/models.py:1291
+#: order/models.py:1311 order/models.py:1313
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:1295
+#: order/models.py:1317
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:1297
+#: order/models.py:1319
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:1300
+#: order/models.py:1322
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:1304
+#: order/models.py:1326
msgid "StockItem is over-allocated"
msgstr ""
-#: order/models.py:1310 order/serializers.py:1002
+#: order/models.py:1332 order/serializers.py:1005
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:1313
+#: order/models.py:1335
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:1314
+#: order/models.py:1336
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:1322
+#: order/models.py:1344
msgid "Line"
msgstr ""
-#: order/models.py:1330 order/serializers.py:1112 order/serializers.py:1240
+#: order/models.py:1352 order/serializers.py:1115 order/serializers.py:1243
#: templates/js/translated/model_renderers.js:301
msgid "Shipment"
msgstr ""
-#: order/models.py:1331
+#: order/models.py:1353
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:1343 templates/InvenTree/notifications/notifications.html:70
+#: order/models.py:1365 templates/InvenTree/notifications/notifications.html:70
msgid "Item"
msgstr ""
-#: order/models.py:1344
+#: order/models.py:1366
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:1347
+#: order/models.py:1369
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/serializers.py:74
+#: order/serializers.py:69
msgid "Price currency"
msgstr ""
-#: order/serializers.py:203
+#: order/serializers.py:198
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:301
+#: order/serializers.py:296
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:325
+#: order/serializers.py:320
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:339
+#: order/serializers.py:334
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:344
+#: order/serializers.py:339
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:350
+#: order/serializers.py:345
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:351
+#: order/serializers.py:346
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:411 order/serializers.py:1077
+#: order/serializers.py:406 order/serializers.py:1080
msgid "Line Item"
msgstr ""
-#: order/serializers.py:417
+#: order/serializers.py:412
msgid "Line item does not match purchase order"
msgstr ""
-#: order/serializers.py:427 order/serializers.py:532
+#: order/serializers.py:422 order/serializers.py:527
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:446 templates/js/translated/order.js:1054
+#: order/serializers.py:441 templates/js/translated/order.js:1161
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:454 templates/js/translated/order.js:1065
+#: order/serializers.py:449 templates/js/translated/order.js:1172
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:467
+#: order/serializers.py:462
msgid "Barcode Hash"
msgstr ""
-#: order/serializers.py:468
+#: order/serializers.py:463
msgid "Unique identifier field"
msgstr ""
-#: order/serializers.py:485
+#: order/serializers.py:480
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:504
+#: order/serializers.py:499
msgid "An integer quantity must be provided for trackable parts"
msgstr ""
-#: order/serializers.py:544
+#: order/serializers.py:539
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:561
+#: order/serializers.py:556
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:572
+#: order/serializers.py:567
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:847
+#: order/serializers.py:842
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:917
+#: order/serializers.py:913
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:967 order/serializers.py:1089
+#: order/serializers.py:970 order/serializers.py:1092
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:989
+#: order/serializers.py:992
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1102
+#: order/serializers.py:1105
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1126 order/serializers.py:1251
+#: order/serializers.py:1129 order/serializers.py:1254
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1129 order/serializers.py:1254
+#: order/serializers.py:1132 order/serializers.py:1257
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1181
+#: order/serializers.py:1184
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1191
+#: order/serializers.py:1194
msgid "The following serial numbers are already allocated"
msgstr ""
@@ -3737,7 +3767,7 @@ msgid "Edit order"
msgstr ""
#: order/templates/order/order_base.html:47
-#: order/templates/order/sales_order_base.html:60
+#: order/templates/order/sales_order_base.html:61
msgid "Cancel order"
msgstr ""
@@ -3759,22 +3789,22 @@ msgid "Mark order as complete"
msgstr ""
#: order/templates/order/order_base.html:62
-#: order/templates/order/sales_order_base.html:67
+#: order/templates/order/sales_order_base.html:68
msgid "Complete Order"
msgstr ""
#: order/templates/order/order_base.html:84
-#: order/templates/order/sales_order_base.html:79
+#: order/templates/order/sales_order_base.html:80
msgid "Order Reference"
msgstr ""
#: order/templates/order/order_base.html:89
-#: order/templates/order/sales_order_base.html:84
+#: order/templates/order/sales_order_base.html:85
msgid "Order Description"
msgstr ""
#: order/templates/order/order_base.html:94
-#: order/templates/order/sales_order_base.html:89
+#: order/templates/order/sales_order_base.html:90
msgid "Order Status"
msgstr ""
@@ -3783,13 +3813,13 @@ msgid "No suppplier information available"
msgstr ""
#: order/templates/order/order_base.html:130
-#: order/templates/order/sales_order_base.html:128
+#: order/templates/order/sales_order_base.html:129
msgid "Completed Line Items"
msgstr ""
#: order/templates/order/order_base.html:136
-#: order/templates/order/sales_order_base.html:134
-#: order/templates/order/sales_order_base.html:144
+#: order/templates/order/sales_order_base.html:135
+#: order/templates/order/sales_order_base.html:145
msgid "Incomplete"
msgstr ""
@@ -3799,7 +3829,7 @@ msgid "Issued"
msgstr ""
#: order/templates/order/order_base.html:183
-#: order/templates/order/sales_order_base.html:189
+#: order/templates/order/sales_order_base.html:190
msgid "Total cost"
msgstr ""
@@ -3835,8 +3865,8 @@ msgstr ""
#: part/templates/part/import_wizard/match_references.html:49
#: templates/js/translated/bom.js:77 templates/js/translated/build.js:427
#: templates/js/translated/build.js:579 templates/js/translated/build.js:1989
-#: templates/js/translated/order.js:711 templates/js/translated/order.js:1143
-#: templates/js/translated/order.js:2386 templates/js/translated/stock.js:570
+#: templates/js/translated/order.js:818 templates/js/translated/order.js:1250
+#: templates/js/translated/order.js:2493 templates/js/translated/stock.js:570
#: templates/js/translated/stock.js:738
#: templates/patterns/wizard/match_fields.html:70
msgid "Remove row"
@@ -3887,7 +3917,7 @@ msgstr ""
#: order/templates/order/purchase_order_detail.html:53
#: order/templates/order/sales_order_detail.html:45
-#: order/templates/order/sales_order_detail.html:273
+#: order/templates/order/sales_order_detail.html:274
msgid "Add Extra Line"
msgstr ""
@@ -3917,27 +3947,32 @@ msgstr ""
msgid "Print packing list"
msgstr ""
-#: order/templates/order/sales_order_base.html:66
-#: order/templates/order/sales_order_base.html:239
+#: order/templates/order/sales_order_base.html:60
+#: templates/js/translated/order.js:211
+msgid "Complete Shipments"
+msgstr ""
+
+#: order/templates/order/sales_order_base.html:67
+#: order/templates/order/sales_order_base.html:250
msgid "Complete Sales Order"
msgstr ""
-#: order/templates/order/sales_order_base.html:102
+#: order/templates/order/sales_order_base.html:103
msgid "This Sales Order has not been fully allocated"
msgstr ""
-#: order/templates/order/sales_order_base.html:122
-#: templates/js/translated/order.js:2142
+#: order/templates/order/sales_order_base.html:123
+#: templates/js/translated/order.js:2249
msgid "Customer Reference"
msgstr ""
-#: order/templates/order/sales_order_base.html:140
+#: order/templates/order/sales_order_base.html:141
#: order/templates/order/sales_order_detail.html:100
#: order/templates/order/so_sidebar.html:11
msgid "Completed Shipments"
msgstr ""
-#: order/templates/order/sales_order_base.html:221
+#: order/templates/order/sales_order_base.html:222
msgid "Edit Sales Order"
msgstr ""
@@ -3959,73 +3994,73 @@ msgstr ""
msgid "New Shipment"
msgstr ""
-#: order/views.py:121
+#: order/views.py:117
msgid "Match Supplier Parts"
msgstr ""
-#: order/views.py:394
+#: order/views.py:390
msgid "Sales order not found"
msgstr ""
-#: order/views.py:400
+#: order/views.py:396
msgid "Price not found"
msgstr ""
-#: order/views.py:403
+#: order/views.py:399
#, python-brace-format
msgid "Updated {part} unit-price to {price}"
msgstr ""
-#: order/views.py:408
+#: order/views.py:404
#, python-brace-format
msgid "Updated {part} unit-price to {price} and quantity to {qty}"
msgstr ""
-#: part/api.py:516
+#: part/api.py:504
msgid "Incoming Purchase Order"
msgstr ""
-#: part/api.py:536
+#: part/api.py:524
msgid "Outgoing Sales Order"
msgstr ""
-#: part/api.py:554
+#: part/api.py:542
msgid "Stock produced by Build Order"
msgstr ""
-#: part/api.py:586
+#: part/api.py:574
msgid "Stock required for Build Order"
msgstr ""
-#: part/api.py:677
+#: part/api.py:665
msgid "Valid"
msgstr ""
-#: part/api.py:678
+#: part/api.py:666
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/api.py:683
+#: part/api.py:671
msgid "This option must be selected"
msgstr ""
-#: part/api.py:1055
+#: part/api.py:1043
msgid "Must be greater than zero"
msgstr ""
-#: part/api.py:1059
+#: part/api.py:1047
msgid "Must be a valid quantity"
msgstr ""
-#: part/api.py:1074
+#: part/api.py:1062
msgid "Specify location for initial part stock"
msgstr ""
-#: part/api.py:1105 part/api.py:1109 part/api.py:1124 part/api.py:1128
+#: part/api.py:1093 part/api.py:1097 part/api.py:1112 part/api.py:1116
msgid "This field is required"
msgstr ""
-#: part/bom.py:125 part/models.py:111 part/models.py:886
+#: part/bom.py:125 part/models.py:99 part/models.py:874
#: part/templates/part/category.html:108 part/templates/part/part_base.html:330
msgid "Default Location"
msgstr ""
@@ -4045,115 +4080,115 @@ msgstr ""
msgid "On Order"
msgstr ""
-#: part/forms.py:81
+#: part/forms.py:79
msgid "Select part category"
msgstr ""
-#: part/forms.py:100
+#: part/forms.py:98
msgid "Add parameter template to same level categories"
msgstr ""
-#: part/forms.py:104
+#: part/forms.py:102
msgid "Add parameter template to all categories"
msgstr ""
-#: part/forms.py:124
+#: part/forms.py:122
msgid "Input quantity for price calculation"
msgstr ""
-#: part/models.py:112
+#: part/models.py:100
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:115
+#: part/models.py:103
msgid "Default keywords"
msgstr ""
-#: part/models.py:115
+#: part/models.py:103
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:125 part/models.py:2637 part/templates/part/category.html:15
+#: part/models.py:113 part/models.py:2625 part/templates/part/category.html:15
#: part/templates/part/part_app_base.html:10
msgid "Part Category"
msgstr ""
-#: part/models.py:126 part/templates/part/category.html:128
+#: part/models.py:114 part/templates/part/category.html:128
#: templates/InvenTree/search.html:95 templates/js/translated/search.js:113
-#: users/models.py:40
+#: users/models.py:38
msgid "Part Categories"
msgstr ""
-#: part/models.py:367 part/templates/part/cat_link.html:3
+#: part/models.py:355 part/templates/part/cat_link.html:3
#: part/templates/part/category.html:17 part/templates/part/category.html:133
#: part/templates/part/category.html:153
#: part/templates/part/category_sidebar.html:9
#: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82
#: templates/InvenTree/settings/sidebar.html:39
#: templates/js/translated/part.js:1768 templates/js/translated/search.js:99
-#: templates/navbar.html:24 users/models.py:41
+#: templates/navbar.html:24 users/models.py:39
msgid "Parts"
msgstr ""
-#: part/models.py:459
+#: part/models.py:447
msgid "Invalid choice for parent part"
msgstr ""
-#: part/models.py:534 part/models.py:546
+#: part/models.py:522 part/models.py:534
#, python-brace-format
msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)"
msgstr ""
-#: part/models.py:676
+#: part/models.py:664
msgid "Next available serial numbers are"
msgstr ""
-#: part/models.py:680
+#: part/models.py:668
msgid "Next available serial number is"
msgstr ""
-#: part/models.py:685
+#: part/models.py:673
msgid "Most recent serial number is"
msgstr ""
-#: part/models.py:781
+#: part/models.py:769
msgid "Duplicate IPN not allowed in part settings"
msgstr ""
-#: part/models.py:810 part/models.py:2690
+#: part/models.py:798 part/models.py:2678
msgid "Part name"
msgstr ""
-#: part/models.py:817
+#: part/models.py:805
msgid "Is Template"
msgstr ""
-#: part/models.py:818
+#: part/models.py:806
msgid "Is this part a template part?"
msgstr ""
-#: part/models.py:828
+#: part/models.py:816
msgid "Is this part a variant of another part?"
msgstr ""
-#: part/models.py:829
+#: part/models.py:817
msgid "Variant Of"
msgstr ""
-#: part/models.py:835
+#: part/models.py:823
msgid "Part description"
msgstr ""
-#: part/models.py:840 part/templates/part/category.html:86
+#: part/models.py:828 part/templates/part/category.html:86
#: part/templates/part/part_base.html:294
msgid "Keywords"
msgstr ""
-#: part/models.py:841
+#: part/models.py:829
msgid "Part keywords to improve visibility in search results"
msgstr ""
-#: part/models.py:848 part/models.py:2387 part/models.py:2636
+#: part/models.py:836 part/models.py:2375 part/models.py:2624
#: part/templates/part/part_base.html:257
#: part/templates/part/set_category.html:15
#: templates/InvenTree/notifications/notifications.html:65
@@ -4162,432 +4197,432 @@ msgstr ""
msgid "Category"
msgstr ""
-#: part/models.py:849
+#: part/models.py:837
msgid "Part category"
msgstr ""
-#: part/models.py:854 part/templates/part/part_base.html:266
+#: part/models.py:842 part/templates/part/part_base.html:266
#: templates/js/translated/part.js:666 templates/js/translated/part.js:1322
#: templates/js/translated/stock.js:1669
msgid "IPN"
msgstr ""
-#: part/models.py:855
+#: part/models.py:843
msgid "Internal Part Number"
msgstr ""
-#: part/models.py:861
+#: part/models.py:849
msgid "Part revision or version number"
msgstr ""
-#: part/models.py:862 part/templates/part/part_base.html:273
-#: report/models.py:193 templates/js/translated/part.js:670
+#: part/models.py:850 part/templates/part/part_base.html:273
+#: report/models.py:188 templates/js/translated/part.js:670
msgid "Revision"
msgstr ""
-#: part/models.py:884
+#: part/models.py:872
msgid "Where is this item normally stored?"
msgstr ""
-#: part/models.py:931 part/templates/part/part_base.html:339
+#: part/models.py:919 part/templates/part/part_base.html:339
msgid "Default Supplier"
msgstr ""
-#: part/models.py:932
+#: part/models.py:920
msgid "Default supplier part"
msgstr ""
-#: part/models.py:939
+#: part/models.py:927
msgid "Default Expiry"
msgstr ""
-#: part/models.py:940
+#: part/models.py:928
msgid "Expiry time (in days) for stock items of this part"
msgstr ""
-#: part/models.py:945 part/templates/part/part_base.html:200
+#: part/models.py:933 part/templates/part/part_base.html:200
msgid "Minimum Stock"
msgstr ""
-#: part/models.py:946
+#: part/models.py:934
msgid "Minimum allowed stock level"
msgstr ""
-#: part/models.py:953
+#: part/models.py:941
msgid "Stock keeping units for this part"
msgstr ""
-#: part/models.py:959
+#: part/models.py:947
msgid "Can this part be built from other parts?"
msgstr ""
-#: part/models.py:965
+#: part/models.py:953
msgid "Can this part be used to build other parts?"
msgstr ""
-#: part/models.py:971
+#: part/models.py:959
msgid "Does this part have tracking for unique items?"
msgstr ""
-#: part/models.py:976
+#: part/models.py:964
msgid "Can this part be purchased from external suppliers?"
msgstr ""
-#: part/models.py:981
+#: part/models.py:969
msgid "Can this part be sold to customers?"
msgstr ""
-#: part/models.py:986
+#: part/models.py:974
msgid "Is this part active?"
msgstr ""
-#: part/models.py:991
+#: part/models.py:979
msgid "Is this a virtual part, such as a software product or license?"
msgstr ""
-#: part/models.py:996
+#: part/models.py:984
msgid "Part notes - supports Markdown formatting"
msgstr ""
-#: part/models.py:999
+#: part/models.py:987
msgid "BOM checksum"
msgstr ""
-#: part/models.py:999
+#: part/models.py:987
msgid "Stored BOM checksum"
msgstr ""
-#: part/models.py:1002
+#: part/models.py:990
msgid "BOM checked by"
msgstr ""
-#: part/models.py:1004
+#: part/models.py:992
msgid "BOM checked date"
msgstr ""
-#: part/models.py:1008
+#: part/models.py:996
msgid "Creation User"
msgstr ""
-#: part/models.py:1872
+#: part/models.py:1860
msgid "Sell multiple"
msgstr ""
-#: part/models.py:2437
+#: part/models.py:2425
msgid "Test templates can only be created for trackable parts"
msgstr ""
-#: part/models.py:2454
+#: part/models.py:2442
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2474 templates/js/translated/part.js:1819
+#: part/models.py:2462 templates/js/translated/part.js:1819
#: templates/js/translated/stock.js:1284
msgid "Test Name"
msgstr ""
-#: part/models.py:2475
+#: part/models.py:2463
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:2480
+#: part/models.py:2468
msgid "Test Description"
msgstr ""
-#: part/models.py:2481
+#: part/models.py:2469
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2486 templates/js/translated/part.js:1828
+#: part/models.py:2474 templates/js/translated/part.js:1828
#: templates/js/translated/table_filters.js:294
msgid "Required"
msgstr ""
-#: part/models.py:2487
+#: part/models.py:2475
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2492 templates/js/translated/part.js:1836
+#: part/models.py:2480 templates/js/translated/part.js:1836
msgid "Requires Value"
msgstr ""
-#: part/models.py:2493
+#: part/models.py:2481
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2498 templates/js/translated/part.js:1843
+#: part/models.py:2486 templates/js/translated/part.js:1843
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:2499
+#: part/models.py:2487
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:2510
+#: part/models.py:2498
#, python-brace-format
msgid "Illegal character in template name ({c})"
msgstr ""
-#: part/models.py:2546
+#: part/models.py:2534
msgid "Parameter template name must be unique"
msgstr ""
-#: part/models.py:2554
+#: part/models.py:2542
msgid "Parameter Name"
msgstr ""
-#: part/models.py:2561
+#: part/models.py:2549
msgid "Parameter Units"
msgstr ""
-#: part/models.py:2591
+#: part/models.py:2579
msgid "Parent Part"
msgstr ""
-#: part/models.py:2593 part/models.py:2642 part/models.py:2643
+#: part/models.py:2581 part/models.py:2630 part/models.py:2631
#: templates/InvenTree/settings/settings.html:226
msgid "Parameter Template"
msgstr ""
-#: part/models.py:2595
+#: part/models.py:2583
msgid "Data"
msgstr ""
-#: part/models.py:2595
+#: part/models.py:2583
msgid "Parameter Value"
msgstr ""
-#: part/models.py:2647 templates/InvenTree/settings/settings.html:235
+#: part/models.py:2635 templates/InvenTree/settings/settings.html:235
msgid "Default Value"
msgstr ""
-#: part/models.py:2648
+#: part/models.py:2636
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:2682
+#: part/models.py:2670
msgid "Part ID or part name"
msgstr ""
-#: part/models.py:2685 templates/js/translated/model_renderers.js:200
+#: part/models.py:2673 templates/js/translated/model_renderers.js:200
msgid "Part ID"
msgstr ""
-#: part/models.py:2686
+#: part/models.py:2674
msgid "Unique part ID value"
msgstr ""
-#: part/models.py:2689
+#: part/models.py:2677
msgid "Part Name"
msgstr ""
-#: part/models.py:2693
+#: part/models.py:2681
msgid "Part IPN"
msgstr ""
-#: part/models.py:2694
+#: part/models.py:2682
msgid "Part IPN value"
msgstr ""
-#: part/models.py:2697
+#: part/models.py:2685
msgid "Level"
msgstr ""
-#: part/models.py:2698
+#: part/models.py:2686
msgid "BOM level"
msgstr ""
-#: part/models.py:2773
+#: part/models.py:2761
msgid "Select parent part"
msgstr ""
-#: part/models.py:2781
+#: part/models.py:2769
msgid "Sub part"
msgstr ""
-#: part/models.py:2782
+#: part/models.py:2770
msgid "Select part to be used in BOM"
msgstr ""
-#: part/models.py:2788
+#: part/models.py:2776
msgid "BOM quantity for this BOM item"
msgstr ""
-#: part/models.py:2790 part/templates/part/upload_bom.html:58
+#: part/models.py:2778 part/templates/part/upload_bom.html:58
#: templates/js/translated/bom.js:898 templates/js/translated/bom.js:992
#: templates/js/translated/table_filters.js:92
msgid "Optional"
msgstr ""
-#: part/models.py:2790
+#: part/models.py:2778
msgid "This BOM item is optional"
msgstr ""
-#: part/models.py:2793 part/templates/part/upload_bom.html:55
+#: part/models.py:2781 part/templates/part/upload_bom.html:55
msgid "Overage"
msgstr ""
-#: part/models.py:2794
+#: part/models.py:2782
msgid "Estimated build wastage quantity (absolute or percentage)"
msgstr ""
-#: part/models.py:2797
+#: part/models.py:2785
msgid "BOM item reference"
msgstr ""
-#: part/models.py:2800
+#: part/models.py:2788
msgid "BOM item notes"
msgstr ""
-#: part/models.py:2802
+#: part/models.py:2790
msgid "Checksum"
msgstr ""
-#: part/models.py:2802
+#: part/models.py:2790
msgid "BOM line checksum"
msgstr ""
-#: part/models.py:2806 part/templates/part/upload_bom.html:57
+#: part/models.py:2794 part/templates/part/upload_bom.html:57
#: templates/js/translated/bom.js:1009
#: templates/js/translated/table_filters.js:68
#: templates/js/translated/table_filters.js:88
msgid "Inherited"
msgstr ""
-#: part/models.py:2807
+#: part/models.py:2795
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr ""
-#: part/models.py:2812 part/templates/part/upload_bom.html:56
+#: part/models.py:2800 part/templates/part/upload_bom.html:56
#: templates/js/translated/bom.js:1001
msgid "Allow Variants"
msgstr ""
-#: part/models.py:2813
+#: part/models.py:2801
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:2898 stock/models.py:495
+#: part/models.py:2886 stock/models.py:486
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:2907 part/models.py:2909
+#: part/models.py:2895 part/models.py:2897
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:3021
+#: part/models.py:3009
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:3043
+#: part/models.py:3031
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:3055
+#: part/models.py:3043
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:3063
+#: part/models.py:3051
msgid "Substitute part"
msgstr ""
-#: part/models.py:3074
+#: part/models.py:3062
msgid "Part 1"
msgstr ""
-#: part/models.py:3078
+#: part/models.py:3066
msgid "Part 2"
msgstr ""
-#: part/models.py:3078
+#: part/models.py:3066
msgid "Select Related Part"
msgstr ""
-#: part/models.py:3110
+#: part/models.py:3098
msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique"
msgstr ""
-#: part/serializers.py:157 part/serializers.py:189 stock/serializers.py:177
+#: part/serializers.py:152 part/serializers.py:184 stock/serializers.py:169
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:923
+#: part/serializers.py:918
msgid "Select part to copy BOM from"
msgstr ""
-#: part/serializers.py:934
+#: part/serializers.py:929
msgid "Remove Existing Data"
msgstr ""
-#: part/serializers.py:935
+#: part/serializers.py:930
msgid "Remove existing BOM items before copying"
msgstr ""
-#: part/serializers.py:940
+#: part/serializers.py:935
msgid "Include Inherited"
msgstr ""
-#: part/serializers.py:941
+#: part/serializers.py:936
msgid "Include BOM items which are inherited from templated parts"
msgstr ""
-#: part/serializers.py:946
+#: part/serializers.py:941
msgid "Skip Invalid Rows"
msgstr ""
-#: part/serializers.py:947
+#: part/serializers.py:942
msgid "Enable this option to skip invalid rows"
msgstr ""
-#: part/serializers.py:952
+#: part/serializers.py:947
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:953
+#: part/serializers.py:948
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
-#: part/serializers.py:997
+#: part/serializers.py:992
msgid "Clear Existing BOM"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:993
msgid "Delete existing BOM items before uploading"
msgstr ""
-#: part/serializers.py:1025
+#: part/serializers.py:1020
msgid "No part column specified"
msgstr ""
-#: part/serializers.py:1068
+#: part/serializers.py:1063
msgid "Multiple matching parts found"
msgstr ""
-#: part/serializers.py:1071
+#: part/serializers.py:1066
msgid "No matching part found"
msgstr ""
-#: part/serializers.py:1074
+#: part/serializers.py:1069
msgid "Part is not designated as a component"
msgstr ""
-#: part/serializers.py:1083
+#: part/serializers.py:1078
msgid "Quantity not provided"
msgstr ""
-#: part/serializers.py:1091
+#: part/serializers.py:1086
msgid "Invalid quantity"
msgstr ""
-#: part/serializers.py:1110
+#: part/serializers.py:1105
msgid "At least one BOM item is required"
msgstr ""
-#: part/tasks.py:15
+#: part/tasks.py:14
msgid "Low stock notification"
msgstr ""
-#: part/tasks.py:16
+#: part/tasks.py:15
#, python-brace-format
msgid "The available stock for {part.name} has fallen below the configured minimum level"
msgstr ""
@@ -5067,7 +5102,7 @@ msgstr ""
msgid "This part is a variant of %(link)s"
msgstr ""
-#: part/templates/part/part_base.html:194 templates/js/translated/order.js:3149
+#: part/templates/part/part_base.html:194 templates/js/translated/order.js:3305
#: templates/js/translated/table_filters.js:193
msgid "In Stock"
msgstr ""
@@ -5359,93 +5394,93 @@ msgstr ""
msgid "Create a new variant of template '%(full_name)s'."
msgstr ""
-#: part/templatetags/inventree_extras.py:191
+#: part/templatetags/inventree_extras.py:186
msgid "Unknown database"
msgstr ""
-#: part/templatetags/inventree_extras.py:228
+#: part/templatetags/inventree_extras.py:223
#, python-brace-format
msgid "{title} v{version}"
msgstr ""
-#: part/views.py:85
+#: part/views.py:74
msgid "Set Part Category"
msgstr ""
-#: part/views.py:135
+#: part/views.py:124
#, python-brace-format
msgid "Set category for {n} parts"
msgstr ""
-#: part/views.py:207
+#: part/views.py:196
msgid "Match References"
msgstr ""
-#: part/views.py:508
+#: part/views.py:497
msgid "None"
msgstr ""
-#: part/views.py:567
+#: part/views.py:556
msgid "Part QR Code"
msgstr ""
-#: part/views.py:669
+#: part/views.py:658
msgid "Select Part Image"
msgstr ""
-#: part/views.py:695
+#: part/views.py:684
msgid "Updated part image"
msgstr ""
-#: part/views.py:698
+#: part/views.py:687
msgid "Part image not found"
msgstr ""
-#: part/views.py:786
+#: part/views.py:775
msgid "Confirm Part Deletion"
msgstr ""
-#: part/views.py:793
+#: part/views.py:782
msgid "Part was deleted"
msgstr ""
-#: part/views.py:802
+#: part/views.py:791
msgid "Part Pricing"
msgstr ""
-#: part/views.py:951
+#: part/views.py:940
msgid "Create Part Parameter Template"
msgstr ""
-#: part/views.py:961
+#: part/views.py:950
msgid "Edit Part Parameter Template"
msgstr ""
-#: part/views.py:968
+#: part/views.py:957
msgid "Delete Part Parameter Template"
msgstr ""
-#: part/views.py:1010
+#: part/views.py:999
msgid "Delete Part Category"
msgstr ""
-#: part/views.py:1016
+#: part/views.py:1005
msgid "Part category was deleted"
msgstr ""
-#: part/views.py:1025
+#: part/views.py:1014
msgid "Create Category Parameter Template"
msgstr ""
-#: part/views.py:1126
+#: part/views.py:1115
msgid "Edit Category Parameter Template"
msgstr ""
-#: part/views.py:1182
+#: part/views.py:1171
msgid "Delete Category Parameter Template"
msgstr ""
-#: plugin/apps.py:50
+#: plugin/apps.py:48
msgid "Your enviroment has an outdated git version. This prevents InvenTree from loading plugin details."
msgstr ""
@@ -5457,47 +5492,47 @@ msgstr ""
msgid "No matching action found"
msgstr ""
-#: plugin/base/barcodes/api.py:53 plugin/base/barcodes/api.py:153
+#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:152
msgid "Must provide barcode_data parameter"
msgstr ""
-#: plugin/base/barcodes/api.py:129
+#: plugin/base/barcodes/api.py:128
msgid "No match found for barcode data"
msgstr ""
-#: plugin/base/barcodes/api.py:131
+#: plugin/base/barcodes/api.py:130
msgid "Match found for barcode data"
msgstr ""
-#: plugin/base/barcodes/api.py:156
+#: plugin/base/barcodes/api.py:155
msgid "Must provide stockitem parameter"
msgstr ""
-#: plugin/base/barcodes/api.py:163
+#: plugin/base/barcodes/api.py:162
msgid "No matching stock item found"
msgstr ""
-#: plugin/base/barcodes/api.py:193
+#: plugin/base/barcodes/api.py:192
msgid "Barcode already matches Stock Item"
msgstr ""
-#: plugin/base/barcodes/api.py:197
+#: plugin/base/barcodes/api.py:196
msgid "Barcode already matches Stock Location"
msgstr ""
-#: plugin/base/barcodes/api.py:201
+#: plugin/base/barcodes/api.py:200
msgid "Barcode already matches Part"
msgstr ""
-#: plugin/base/barcodes/api.py:207 plugin/base/barcodes/api.py:219
+#: plugin/base/barcodes/api.py:206 plugin/base/barcodes/api.py:218
msgid "Barcode hash already matches Stock Item"
msgstr ""
-#: plugin/base/barcodes/api.py:225
+#: plugin/base/barcodes/api.py:224
msgid "Barcode associated with Stock Item"
msgstr ""
-#: plugin/base/label/label.py:40
+#: plugin/base/label/label.py:39
msgid "Label printing failed"
msgstr ""
@@ -5519,51 +5554,51 @@ msgstr ""
msgid "Allow sending of emails for event notifications"
msgstr ""
-#: plugin/models.py:36
+#: plugin/models.py:35
msgid "Plugin Metadata"
msgstr ""
-#: plugin/models.py:37
+#: plugin/models.py:36
msgid "JSON metadata field, for use by external plugins"
msgstr ""
-#: plugin/models.py:86
+#: plugin/models.py:85
msgid "Plugin Configuration"
msgstr ""
-#: plugin/models.py:87
+#: plugin/models.py:86
msgid "Plugin Configurations"
msgstr ""
-#: plugin/models.py:92
+#: plugin/models.py:91
msgid "Key"
msgstr ""
-#: plugin/models.py:93
+#: plugin/models.py:92
msgid "Key of plugin"
msgstr ""
-#: plugin/models.py:101
+#: plugin/models.py:100
msgid "PluginName of the plugin"
msgstr ""
-#: plugin/models.py:107
+#: plugin/models.py:106
msgid "Is the plugin active"
msgstr ""
-#: plugin/models.py:180
+#: plugin/models.py:179
msgid "Plugin"
msgstr ""
-#: plugin/models.py:254
+#: plugin/models.py:253
msgid "Method"
msgstr ""
-#: plugin/plugin.py:247
+#: plugin/plugin.py:246
msgid "No author found"
msgstr ""
-#: plugin/plugin.py:261
+#: plugin/plugin.py:260
msgid "No date found"
msgstr ""
@@ -5631,92 +5666,96 @@ msgstr ""
msgid "Either packagename of URL must be provided"
msgstr ""
-#: report/api.py:233 report/api.py:280
+#: report/api.py:191
+msgid "No valid objects provided to template"
+msgstr ""
+
+#: report/api.py:223 report/api.py:270
#, python-brace-format
msgid "Template file '{template}' is missing or does not exist"
msgstr ""
-#: report/models.py:175
+#: report/models.py:170
msgid "Template name"
msgstr ""
-#: report/models.py:181
+#: report/models.py:176
msgid "Report template file"
msgstr ""
-#: report/models.py:188
+#: report/models.py:183
msgid "Report template description"
msgstr ""
-#: report/models.py:194
+#: report/models.py:189
msgid "Report revision number (auto-increments)"
msgstr ""
-#: report/models.py:285
+#: report/models.py:280
msgid "Pattern for generating report filenames"
msgstr ""
-#: report/models.py:292
+#: report/models.py:287
msgid "Report template is enabled"
msgstr ""
-#: report/models.py:316
+#: report/models.py:311
msgid "StockItem query filters (comma-separated list of key=value pairs)"
msgstr ""
-#: report/models.py:324
+#: report/models.py:319
msgid "Include Installed Tests"
msgstr ""
-#: report/models.py:325
+#: report/models.py:320
msgid "Include test results for stock items installed inside assembled item"
msgstr ""
-#: report/models.py:375
+#: report/models.py:370
msgid "Build Filters"
msgstr ""
-#: report/models.py:376
+#: report/models.py:371
msgid "Build query filters (comma-separated list of key=value pairs"
msgstr ""
-#: report/models.py:418
+#: report/models.py:413
msgid "Part Filters"
msgstr ""
-#: report/models.py:419
+#: report/models.py:414
msgid "Part query filters (comma-separated list of key=value pairs"
msgstr ""
-#: report/models.py:453
+#: report/models.py:448
msgid "Purchase order query filters"
msgstr ""
-#: report/models.py:492
+#: report/models.py:487
msgid "Sales order query filters"
msgstr ""
-#: report/models.py:547
+#: report/models.py:542
msgid "Snippet"
msgstr ""
-#: report/models.py:548
+#: report/models.py:543
msgid "Report snippet file"
msgstr ""
-#: report/models.py:552
+#: report/models.py:547
msgid "Snippet file description"
msgstr ""
-#: report/models.py:587
+#: report/models.py:582
msgid "Asset"
msgstr ""
-#: report/models.py:588
+#: report/models.py:583
msgid "Report asset file"
msgstr ""
-#: report/models.py:591
+#: report/models.py:586
msgid "Asset file description"
msgstr ""
@@ -5733,12 +5772,12 @@ msgid "Stock Item Test Report"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:79
-#: stock/models.py:664 stock/templates/stock/item_base.html:162
+#: stock/models.py:655 stock/templates/stock/item_base.html:162
#: templates/js/translated/build.js:420 templates/js/translated/build.js:572
#: templates/js/translated/build.js:1178 templates/js/translated/build.js:1688
#: templates/js/translated/model_renderers.js:106
-#: templates/js/translated/order.js:108 templates/js/translated/order.js:2835
-#: templates/js/translated/order.js:2924 templates/js/translated/stock.js:435
+#: templates/js/translated/order.js:109 templates/js/translated/order.js:2991
+#: templates/js/translated/order.js:3080 templates/js/translated/stock.js:435
msgid "Serial Number"
msgstr ""
@@ -5747,19 +5786,19 @@ msgid "Test Results"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:93
-#: stock/models.py:2192
+#: stock/models.py:2183
msgid "Test"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:94
-#: stock/models.py:2198
+#: stock/models.py:2189
msgid "Result"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:97
#: templates/InvenTree/settings/plugin.html:51
#: templates/InvenTree/settings/plugin_settings.html:38
-#: templates/js/translated/order.js:1468 templates/js/translated/stock.js:2345
+#: templates/js/translated/order.js:1575 templates/js/translated/stock.js:2345
msgid "Date"
msgstr ""
@@ -5782,362 +5821,362 @@ msgstr ""
msgid "Serial"
msgstr ""
-#: stock/api.py:554
+#: stock/api.py:542
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:561
+#: stock/api.py:549
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:586
+#: stock/api.py:574
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/models.py:91 stock/models.py:759
+#: stock/models.py:82 stock/models.py:750
#: stock/templates/stock/item_base.html:417
msgid "Owner"
msgstr ""
-#: stock/models.py:92 stock/models.py:760
+#: stock/models.py:83 stock/models.py:751
msgid "Select Owner"
msgstr ""
-#: stock/models.py:468
+#: stock/models.py:459
msgid "StockItem with this serial number already exists"
msgstr ""
-#: stock/models.py:512
+#: stock/models.py:503
#, python-brace-format
msgid "Part type ('{pf}') must be {pe}"
msgstr ""
-#: stock/models.py:522 stock/models.py:531
+#: stock/models.py:513 stock/models.py:522
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:523
+#: stock/models.py:514
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:545
+#: stock/models.py:536
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:551
+#: stock/models.py:542
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:565
+#: stock/models.py:556
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:608
+#: stock/models.py:599
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:617
+#: stock/models.py:608
msgid "Base part"
msgstr ""
-#: stock/models.py:625
+#: stock/models.py:616
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:631 stock/templates/stock/location.html:17
+#: stock/models.py:622 stock/templates/stock/location.html:17
#: stock/templates/stock/stock_app_base.html:8
msgid "Stock Location"
msgstr ""
-#: stock/models.py:634
+#: stock/models.py:625
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:641
+#: stock/models.py:632
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:647 stock/templates/stock/item_base.html:288
+#: stock/models.py:638 stock/templates/stock/item_base.html:288
msgid "Installed In"
msgstr ""
-#: stock/models.py:650
+#: stock/models.py:641
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:666
+#: stock/models.py:657
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:680
+#: stock/models.py:671
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:685
+#: stock/models.py:676
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:694
+#: stock/models.py:685
msgid "Source Build"
msgstr ""
-#: stock/models.py:696
+#: stock/models.py:687
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:707
+#: stock/models.py:698
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:710
+#: stock/models.py:701
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:716
+#: stock/models.py:707
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:722 stock/templates/stock/item_base.html:199
+#: stock/models.py:713 stock/templates/stock/item_base.html:199
#: templates/js/translated/stock.js:1822
msgid "Expiry Date"
msgstr ""
-#: stock/models.py:723
+#: stock/models.py:714
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:736
+#: stock/models.py:727
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:736
+#: stock/models.py:727
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:746 stock/templates/stock/item.html:137
+#: stock/models.py:737 stock/templates/stock/item.html:137
msgid "Stock Item Notes"
msgstr ""
-#: stock/models.py:755
+#: stock/models.py:746
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:787
+#: stock/models.py:778
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1307
+#: stock/models.py:1298
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1313
+#: stock/models.py:1304
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1319
+#: stock/models.py:1310
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({n})"
msgstr ""
-#: stock/models.py:1322
+#: stock/models.py:1313
msgid "Serial numbers must be a list of integers"
msgstr ""
-#: stock/models.py:1325
+#: stock/models.py:1316
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1332
+#: stock/models.py:1323
#, python-brace-format
msgid "Serial numbers already exist: {exists}"
msgstr ""
-#: stock/models.py:1403
+#: stock/models.py:1394
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:1406
+#: stock/models.py:1397
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:1409
+#: stock/models.py:1400
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:1412
+#: stock/models.py:1403
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:1415
+#: stock/models.py:1406
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:1418
+#: stock/models.py:1409
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:1425 stock/serializers.py:871
+#: stock/models.py:1416 stock/serializers.py:863
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:1429
+#: stock/models.py:1420
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:1433
+#: stock/models.py:1424
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:1437
+#: stock/models.py:1428
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:1609
+#: stock/models.py:1600
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2112
+#: stock/models.py:2103
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2169
+#: stock/models.py:2160
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:2175
+#: stock/models.py:2166
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:2193
+#: stock/models.py:2184
msgid "Test name"
msgstr ""
-#: stock/models.py:2199
+#: stock/models.py:2190
msgid "Test result"
msgstr ""
-#: stock/models.py:2205
+#: stock/models.py:2196
msgid "Test output value"
msgstr ""
-#: stock/models.py:2212
+#: stock/models.py:2203
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:2218
+#: stock/models.py:2209
msgid "Test notes"
msgstr ""
-#: stock/serializers.py:170
+#: stock/serializers.py:162
msgid "Purchase price of this stock item"
msgstr ""
-#: stock/serializers.py:291
+#: stock/serializers.py:283
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:306
+#: stock/serializers.py:298
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:312
+#: stock/serializers.py:304
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:323 stock/serializers.py:828 stock/serializers.py:1069
+#: stock/serializers.py:315 stock/serializers.py:820 stock/serializers.py:1061
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:330
+#: stock/serializers.py:322
msgid "Optional note field"
msgstr ""
-#: stock/serializers.py:343
+#: stock/serializers.py:335
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:360
+#: stock/serializers.py:352
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:402
+#: stock/serializers.py:394
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:418
+#: stock/serializers.py:410
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:425
+#: stock/serializers.py:417
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:463
+#: stock/serializers.py:455
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:468
+#: stock/serializers.py:460
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:685
+#: stock/serializers.py:677
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:689
+#: stock/serializers.py:681
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:693
+#: stock/serializers.py:685
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:723
+#: stock/serializers.py:715
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:729
+#: stock/serializers.py:721
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:737
+#: stock/serializers.py:729
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:747 stock/serializers.py:977
+#: stock/serializers.py:739 stock/serializers.py:969
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:835
+#: stock/serializers.py:827
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:840
+#: stock/serializers.py:832
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:841
+#: stock/serializers.py:833
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:846
+#: stock/serializers.py:838
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:847
+#: stock/serializers.py:839
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:857
+#: stock/serializers.py:849
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:939
+#: stock/serializers.py:931
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:967
+#: stock/serializers.py:959
msgid "Stock transaction notes"
msgstr ""
@@ -6450,7 +6489,7 @@ msgid "Sublocations"
msgstr ""
#: stock/templates/stock/location.html:156 templates/InvenTree/search.html:164
-#: templates/js/translated/search.js:145 users/models.py:42
+#: templates/js/translated/search.js:153 users/models.py:40
msgid "Stock Locations"
msgstr ""
@@ -6502,7 +6541,7 @@ msgstr ""
msgid "Child Items"
msgstr ""
-#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:227
+#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:221
msgid "Convert Stock Item"
msgstr ""
@@ -6527,55 +6566,55 @@ msgstr ""
msgid "Are you sure you want to delete this stock tracking entry?"
msgstr ""
-#: stock/views.py:125
+#: stock/views.py:119
msgid "Stock Location QR code"
msgstr ""
-#: stock/views.py:144
+#: stock/views.py:138
msgid "Return to Stock"
msgstr ""
-#: stock/views.py:153
+#: stock/views.py:147
msgid "Specify a valid location"
msgstr ""
-#: stock/views.py:164
+#: stock/views.py:158
msgid "Stock item returned from customer"
msgstr ""
-#: stock/views.py:175
+#: stock/views.py:169
msgid "Delete All Test Data"
msgstr ""
-#: stock/views.py:192
+#: stock/views.py:186
msgid "Confirm test data deletion"
msgstr ""
-#: stock/views.py:193
+#: stock/views.py:187
msgid "Check the confirmation box"
msgstr ""
-#: stock/views.py:208
+#: stock/views.py:202
msgid "Stock Item QR Code"
msgstr ""
-#: stock/views.py:264
+#: stock/views.py:258
msgid "Delete Stock Location"
msgstr ""
-#: stock/views.py:277
+#: stock/views.py:271
msgid "Delete Stock Item"
msgstr ""
-#: stock/views.py:288
+#: stock/views.py:282
msgid "Delete Stock Tracking Entry"
msgstr ""
-#: stock/views.py:295
+#: stock/views.py:289
msgid "Edit Stock Tracking Entry"
msgstr ""
-#: stock/views.py:304
+#: stock/views.py:298
msgid "Add Stock Tracking Entry"
msgstr ""
@@ -6849,7 +6888,7 @@ msgid "Install Plugin"
msgstr ""
#: templates/InvenTree/settings/plugin.html:48 templates/navbar.html:137
-#: users/models.py:39
+#: users/models.py:37
msgid "Admin"
msgstr ""
@@ -7294,9 +7333,9 @@ msgstr ""
#: templates/about.html:11 templates/about.html:105
#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621
-#: templates/js/translated/modals.js:55 templates/js/translated/modals.js:591
-#: templates/js/translated/modals.js:685 templates/js/translated/modals.js:993
-#: templates/js/translated/order.js:806 templates/modals.html:15
+#: templates/js/translated/modals.js:55 templates/js/translated/modals.js:594
+#: templates/js/translated/modals.js:688 templates/js/translated/modals.js:996
+#: templates/js/translated/order.js:913 templates/modals.html:15
#: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50
msgid "Close"
msgstr ""
@@ -7609,11 +7648,11 @@ msgstr ""
msgid "Remote image must not exceed maximum allowable file size"
msgstr ""
-#: templates/js/translated/api.js:190 templates/js/translated/modals.js:1063
+#: templates/js/translated/api.js:190 templates/js/translated/modals.js:1066
msgid "No Response"
msgstr ""
-#: templates/js/translated/api.js:191 templates/js/translated/modals.js:1064
+#: templates/js/translated/api.js:191 templates/js/translated/modals.js:1067
msgid "No response from the InvenTree server"
msgstr ""
@@ -7625,27 +7664,27 @@ msgstr ""
msgid "API request returned error code 400"
msgstr ""
-#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1073
+#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1076
msgid "Error 401: Not Authenticated"
msgstr ""
-#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1074
+#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1077
msgid "Authentication credentials not supplied"
msgstr ""
-#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1078
+#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1081
msgid "Error 403: Permission Denied"
msgstr ""
-#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1079
+#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1082
msgid "You do not have the required permissions to access this function"
msgstr ""
-#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1083
+#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1086
msgid "Error 404: Resource Not Found"
msgstr ""
-#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1084
+#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1087
msgid "The requested resource could not be located on the server"
msgstr ""
@@ -7657,11 +7696,11 @@ msgstr ""
msgid "HTTP method not allowed at URL"
msgstr ""
-#: templates/js/translated/api.js:222 templates/js/translated/modals.js:1088
+#: templates/js/translated/api.js:222 templates/js/translated/modals.js:1091
msgid "Error 408: Timeout"
msgstr ""
-#: templates/js/translated/api.js:223 templates/js/translated/modals.js:1089
+#: templates/js/translated/api.js:223 templates/js/translated/modals.js:1092
msgid "Connection timeout while requesting data from server"
msgstr ""
@@ -7730,7 +7769,7 @@ msgid "Unknown response from server"
msgstr ""
#: templates/js/translated/barcode.js:182
-#: templates/js/translated/modals.js:1053
+#: templates/js/translated/modals.js:1056
msgid "Invalid server response"
msgstr ""
@@ -7812,12 +7851,12 @@ msgid "Download BOM Template"
msgstr ""
#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287
-#: templates/js/translated/order.js:587 templates/js/translated/tables.js:53
+#: templates/js/translated/order.js:694 templates/js/translated/tables.js:53
msgid "Format"
msgstr ""
#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288
-#: templates/js/translated/order.js:588
+#: templates/js/translated/order.js:695
msgid "Select file format"
msgstr ""
@@ -8117,12 +8156,12 @@ msgid "No required tests for this build"
msgstr ""
#: templates/js/translated/build.js:1727 templates/js/translated/build.js:2556
-#: templates/js/translated/order.js:2872
+#: templates/js/translated/order.js:3028
msgid "Edit stock allocation"
msgstr ""
#: templates/js/translated/build.js:1729 templates/js/translated/build.js:2557
-#: templates/js/translated/order.js:2873
+#: templates/js/translated/order.js:3029
msgid "Delete stock allocation"
msgstr ""
@@ -8151,11 +8190,11 @@ msgid "Sufficient stock available"
msgstr ""
#: templates/js/translated/build.js:1856 templates/js/translated/build.js:2101
-#: templates/js/translated/build.js:2552 templates/js/translated/order.js:3159
+#: templates/js/translated/build.js:2552 templates/js/translated/order.js:3315
msgid "Allocated"
msgstr ""
-#: templates/js/translated/build.js:1904 templates/js/translated/order.js:3239
+#: templates/js/translated/build.js:1904 templates/js/translated/order.js:3395
msgid "Build stock"
msgstr ""
@@ -8163,21 +8202,21 @@ msgstr ""
msgid "Order stock"
msgstr ""
-#: templates/js/translated/build.js:1911 templates/js/translated/order.js:3232
+#: templates/js/translated/build.js:1911 templates/js/translated/order.js:3388
msgid "Allocate stock"
msgstr ""
#: templates/js/translated/build.js:1950 templates/js/translated/label.js:172
-#: templates/js/translated/order.js:634 templates/js/translated/order.js:2448
+#: templates/js/translated/order.js:741 templates/js/translated/order.js:2555
#: templates/js/translated/report.js:225
msgid "Select Parts"
msgstr ""
-#: templates/js/translated/build.js:1951 templates/js/translated/order.js:2449
+#: templates/js/translated/build.js:1951 templates/js/translated/order.js:2556
msgid "You must select at least one part to allocate"
msgstr ""
-#: templates/js/translated/build.js:2000 templates/js/translated/order.js:2397
+#: templates/js/translated/build.js:2000 templates/js/translated/order.js:2504
msgid "Specify stock allocation quantity"
msgstr ""
@@ -8189,7 +8228,7 @@ msgstr ""
msgid "All selected parts have been fully allocated"
msgstr ""
-#: templates/js/translated/build.js:2089 templates/js/translated/order.js:2463
+#: templates/js/translated/build.js:2089 templates/js/translated/order.js:2570
msgid "Select source location (leave blank to take from all locations)"
msgstr ""
@@ -8197,11 +8236,11 @@ msgstr ""
msgid "Allocate Stock Items to Build Order"
msgstr ""
-#: templates/js/translated/build.js:2128 templates/js/translated/order.js:2511
+#: templates/js/translated/build.js:2128 templates/js/translated/order.js:2667
msgid "No matching stock locations"
msgstr ""
-#: templates/js/translated/build.js:2200 templates/js/translated/order.js:2588
+#: templates/js/translated/build.js:2200 templates/js/translated/order.js:2744
msgid "No matching stock items"
msgstr ""
@@ -8275,7 +8314,7 @@ msgstr ""
msgid "Delete Manufacturer Part"
msgstr ""
-#: templates/js/translated/company.js:165 templates/js/translated/order.js:384
+#: templates/js/translated/company.js:165 templates/js/translated/order.js:491
msgid "Add Supplier"
msgstr ""
@@ -8410,40 +8449,40 @@ msgstr ""
msgid "View operation not allowed"
msgstr ""
-#: templates/js/translated/forms.js:641
+#: templates/js/translated/forms.js:646
msgid "Keep this form open"
msgstr ""
-#: templates/js/translated/forms.js:716
+#: templates/js/translated/forms.js:746
msgid "Enter a valid number"
msgstr ""
-#: templates/js/translated/forms.js:1208 templates/modals.html:19
+#: templates/js/translated/forms.js:1238 templates/modals.html:19
#: templates/modals.html:43
msgid "Form errors exist"
msgstr ""
-#: templates/js/translated/forms.js:1634
+#: templates/js/translated/forms.js:1671
msgid "No results found"
msgstr ""
-#: templates/js/translated/forms.js:1849 templates/search.html:29
+#: templates/js/translated/forms.js:1886 templates/search.html:29
msgid "Searching"
msgstr ""
-#: templates/js/translated/forms.js:2102
+#: templates/js/translated/forms.js:2139
msgid "Clear input"
msgstr ""
-#: templates/js/translated/forms.js:2567
+#: templates/js/translated/forms.js:2605
msgid "File Column"
msgstr ""
-#: templates/js/translated/forms.js:2567
+#: templates/js/translated/forms.js:2605
msgid "Field Name"
msgstr ""
-#: templates/js/translated/forms.js:2579
+#: templates/js/translated/forms.js:2617
msgid "Select Columns"
msgstr ""
@@ -8517,62 +8556,62 @@ msgstr ""
msgid "Select Label Template"
msgstr ""
-#: templates/js/translated/modals.js:78 templates/js/translated/modals.js:138
-#: templates/js/translated/modals.js:617
+#: templates/js/translated/modals.js:81 templates/js/translated/modals.js:141
+#: templates/js/translated/modals.js:620
msgid "Cancel"
msgstr ""
-#: templates/js/translated/modals.js:79 templates/js/translated/modals.js:137
-#: templates/js/translated/modals.js:684 templates/js/translated/modals.js:992
+#: templates/js/translated/modals.js:82 templates/js/translated/modals.js:140
+#: templates/js/translated/modals.js:687 templates/js/translated/modals.js:995
#: templates/modals.html:28 templates/modals.html:51
msgid "Submit"
msgstr ""
-#: templates/js/translated/modals.js:136
+#: templates/js/translated/modals.js:139
msgid "Form Title"
msgstr ""
-#: templates/js/translated/modals.js:399
+#: templates/js/translated/modals.js:402
msgid "Waiting for server..."
msgstr ""
-#: templates/js/translated/modals.js:558
+#: templates/js/translated/modals.js:561
msgid "Show Error Information"
msgstr ""
-#: templates/js/translated/modals.js:616
+#: templates/js/translated/modals.js:619
msgid "Accept"
msgstr ""
-#: templates/js/translated/modals.js:673
+#: templates/js/translated/modals.js:676
msgid "Loading Data"
msgstr ""
-#: templates/js/translated/modals.js:944
+#: templates/js/translated/modals.js:947
msgid "Invalid response from server"
msgstr ""
-#: templates/js/translated/modals.js:944
+#: templates/js/translated/modals.js:947
msgid "Form data missing from server response"
msgstr ""
-#: templates/js/translated/modals.js:956
+#: templates/js/translated/modals.js:959
msgid "Error posting form data"
msgstr ""
-#: templates/js/translated/modals.js:1053
+#: templates/js/translated/modals.js:1056
msgid "JSON response missing form data"
msgstr ""
-#: templates/js/translated/modals.js:1068
+#: templates/js/translated/modals.js:1071
msgid "Error 400: Bad Request"
msgstr ""
-#: templates/js/translated/modals.js:1069
+#: templates/js/translated/modals.js:1072
msgid "Server returned error code 400"
msgstr ""
-#: templates/js/translated/modals.js:1092
+#: templates/js/translated/modals.js:1095
msgid "Error requesting form data"
msgstr ""
@@ -8630,361 +8669,377 @@ msgstr ""
msgid "Notifications will load here"
msgstr ""
-#: templates/js/translated/order.js:84
+#: templates/js/translated/order.js:85
msgid "No stock items have been allocated to this shipment"
msgstr ""
-#: templates/js/translated/order.js:89
+#: templates/js/translated/order.js:90
msgid "The following stock items will be shipped"
msgstr ""
-#: templates/js/translated/order.js:129
+#: templates/js/translated/order.js:130
msgid "Complete Shipment"
msgstr ""
-#: templates/js/translated/order.js:135
+#: templates/js/translated/order.js:141
msgid "Confirm Shipment"
msgstr ""
-#: templates/js/translated/order.js:156
-msgid "Complete Purchase Order"
-msgstr ""
-
-#: templates/js/translated/order.js:162
-msgid "Mark this order as complete?"
-msgstr ""
-
-#: templates/js/translated/order.js:168
-msgid "All line items have been received"
-msgstr ""
-
-#: templates/js/translated/order.js:173
-msgid "This order has line items which have not been marked as received."
-msgstr ""
-
-#: templates/js/translated/order.js:174
-msgid "Completing this order means that the order and line items will no longer be editable."
-msgstr ""
-
#: templates/js/translated/order.js:197
-msgid "Cancel Purchase Order"
+msgid "No pending shipments found"
msgstr ""
-#: templates/js/translated/order.js:202
-msgid "Are you sure you wish to cancel this purchase order?"
+#: templates/js/translated/order.js:201
+msgid "No stock items have been allocated to pending shipments"
msgstr ""
-#: templates/js/translated/order.js:208
-msgid "This purchase order can not be cancelled"
-msgstr ""
-
-#: templates/js/translated/order.js:231
-msgid "Issue Purchase Order"
-msgstr ""
-
-#: templates/js/translated/order.js:236
-msgid "After placing this purchase order, line items will no longer be editable."
-msgstr ""
-
-#: templates/js/translated/order.js:258
-msgid "Cancel Sales Order"
+#: templates/js/translated/order.js:233
+msgid "Skip"
msgstr ""
#: templates/js/translated/order.js:263
+msgid "Complete Purchase Order"
+msgstr ""
+
+#: templates/js/translated/order.js:269
+msgid "Mark this order as complete?"
+msgstr ""
+
+#: templates/js/translated/order.js:275
+msgid "All line items have been received"
+msgstr ""
+
+#: templates/js/translated/order.js:280
+msgid "This order has line items which have not been marked as received."
+msgstr ""
+
+#: templates/js/translated/order.js:281
+msgid "Completing this order means that the order and line items will no longer be editable."
+msgstr ""
+
+#: templates/js/translated/order.js:304
+msgid "Cancel Purchase Order"
+msgstr ""
+
+#: templates/js/translated/order.js:309
+msgid "Are you sure you wish to cancel this purchase order?"
+msgstr ""
+
+#: templates/js/translated/order.js:315
+msgid "This purchase order can not be cancelled"
+msgstr ""
+
+#: templates/js/translated/order.js:338
+msgid "Issue Purchase Order"
+msgstr ""
+
+#: templates/js/translated/order.js:343
+msgid "After placing this purchase order, line items will no longer be editable."
+msgstr ""
+
+#: templates/js/translated/order.js:365
+msgid "Cancel Sales Order"
+msgstr ""
+
+#: templates/js/translated/order.js:370
msgid "Cancelling this order means that the order will no longer be editable."
msgstr ""
-#: templates/js/translated/order.js:317
+#: templates/js/translated/order.js:424
msgid "Create New Shipment"
msgstr ""
-#: templates/js/translated/order.js:342
+#: templates/js/translated/order.js:449
msgid "Add Customer"
msgstr ""
-#: templates/js/translated/order.js:367
+#: templates/js/translated/order.js:474
msgid "Create Sales Order"
msgstr ""
-#: templates/js/translated/order.js:584
+#: templates/js/translated/order.js:691
msgid "Export Order"
msgstr ""
-#: templates/js/translated/order.js:635
+#: templates/js/translated/order.js:742
msgid "At least one purchaseable part must be selected"
msgstr ""
-#: templates/js/translated/order.js:660
+#: templates/js/translated/order.js:767
msgid "Quantity to order"
msgstr ""
-#: templates/js/translated/order.js:669
+#: templates/js/translated/order.js:776
msgid "New supplier part"
msgstr ""
-#: templates/js/translated/order.js:687
+#: templates/js/translated/order.js:794
msgid "New purchase order"
msgstr ""
-#: templates/js/translated/order.js:720
+#: templates/js/translated/order.js:827
msgid "Add to purchase order"
msgstr ""
-#: templates/js/translated/order.js:829
+#: templates/js/translated/order.js:936
msgid "No matching supplier parts"
msgstr ""
-#: templates/js/translated/order.js:844
+#: templates/js/translated/order.js:951
msgid "No matching purchase orders"
msgstr ""
-#: templates/js/translated/order.js:1000
+#: templates/js/translated/order.js:1107
msgid "Select Line Items"
msgstr ""
-#: templates/js/translated/order.js:1001
+#: templates/js/translated/order.js:1108
msgid "At least one line item must be selected"
msgstr ""
-#: templates/js/translated/order.js:1021 templates/js/translated/order.js:1120
+#: templates/js/translated/order.js:1128 templates/js/translated/order.js:1227
msgid "Add batch code"
msgstr ""
-#: templates/js/translated/order.js:1027 templates/js/translated/order.js:1131
+#: templates/js/translated/order.js:1134 templates/js/translated/order.js:1238
msgid "Add serial numbers"
msgstr ""
-#: templates/js/translated/order.js:1039
+#: templates/js/translated/order.js:1146
msgid "Quantity to receive"
msgstr ""
-#: templates/js/translated/order.js:1103 templates/js/translated/stock.js:2085
+#: templates/js/translated/order.js:1210 templates/js/translated/stock.js:2085
msgid "Stock Status"
msgstr ""
-#: templates/js/translated/order.js:1194
+#: templates/js/translated/order.js:1301
msgid "Order Code"
msgstr ""
-#: templates/js/translated/order.js:1195
+#: templates/js/translated/order.js:1302
msgid "Ordered"
msgstr ""
-#: templates/js/translated/order.js:1197
+#: templates/js/translated/order.js:1304
msgid "Quantity to Receive"
msgstr ""
-#: templates/js/translated/order.js:1216
+#: templates/js/translated/order.js:1323
msgid "Confirm receipt of items"
msgstr ""
-#: templates/js/translated/order.js:1217
+#: templates/js/translated/order.js:1324
msgid "Receive Purchase Order Items"
msgstr ""
-#: templates/js/translated/order.js:1409 templates/js/translated/part.js:870
+#: templates/js/translated/order.js:1516 templates/js/translated/part.js:870
msgid "No purchase orders found"
msgstr ""
-#: templates/js/translated/order.js:1434 templates/js/translated/order.js:2119
+#: templates/js/translated/order.js:1541 templates/js/translated/order.js:2226
msgid "Order is overdue"
msgstr ""
-#: templates/js/translated/order.js:1484 templates/js/translated/order.js:2184
-#: templates/js/translated/order.js:2314
+#: templates/js/translated/order.js:1591 templates/js/translated/order.js:2291
+#: templates/js/translated/order.js:2421
msgid "Items"
msgstr ""
-#: templates/js/translated/order.js:1558 templates/js/translated/order.js:3291
+#: templates/js/translated/order.js:1665 templates/js/translated/order.js:3447
msgid "Duplicate Line Item"
msgstr ""
-#: templates/js/translated/order.js:1575 templates/js/translated/order.js:3313
+#: templates/js/translated/order.js:1682 templates/js/translated/order.js:3469
msgid "Edit Line Item"
msgstr ""
-#: templates/js/translated/order.js:1588 templates/js/translated/order.js:3324
+#: templates/js/translated/order.js:1695 templates/js/translated/order.js:3480
msgid "Delete Line Item"
msgstr ""
-#: templates/js/translated/order.js:1631
+#: templates/js/translated/order.js:1738
msgid "No line items found"
msgstr ""
-#: templates/js/translated/order.js:1658 templates/js/translated/order.js:3048
+#: templates/js/translated/order.js:1765 templates/js/translated/order.js:3204
msgid "Total"
msgstr ""
-#: templates/js/translated/order.js:1712 templates/js/translated/order.js:1914
-#: templates/js/translated/order.js:3073 templates/js/translated/order.js:3556
+#: templates/js/translated/order.js:1819 templates/js/translated/order.js:2021
+#: templates/js/translated/order.js:3229 templates/js/translated/order.js:3714
#: templates/js/translated/part.js:1948 templates/js/translated/part.js:2301
msgid "Unit Price"
msgstr ""
-#: templates/js/translated/order.js:1727 templates/js/translated/order.js:1930
-#: templates/js/translated/order.js:3089 templates/js/translated/order.js:3572
+#: templates/js/translated/order.js:1834 templates/js/translated/order.js:2037
+#: templates/js/translated/order.js:3245 templates/js/translated/order.js:3730
msgid "Total Price"
msgstr ""
-#: templates/js/translated/order.js:1768 templates/js/translated/order.js:3131
+#: templates/js/translated/order.js:1875 templates/js/translated/order.js:3287
#: templates/js/translated/part.js:979
msgid "This line item is overdue"
msgstr ""
-#: templates/js/translated/order.js:1827 templates/js/translated/part.js:1025
+#: templates/js/translated/order.js:1934 templates/js/translated/part.js:1025
msgid "Receive line item"
msgstr ""
-#: templates/js/translated/order.js:1831 templates/js/translated/order.js:3245
+#: templates/js/translated/order.js:1938 templates/js/translated/order.js:3401
msgid "Duplicate line item"
msgstr ""
-#: templates/js/translated/order.js:1832 templates/js/translated/order.js:3246
+#: templates/js/translated/order.js:1939 templates/js/translated/order.js:3402
msgid "Edit line item"
msgstr ""
-#: templates/js/translated/order.js:1833 templates/js/translated/order.js:3250
+#: templates/js/translated/order.js:1940 templates/js/translated/order.js:3406
msgid "Delete line item"
msgstr ""
-#: templates/js/translated/order.js:1979 templates/js/translated/order.js:3621
+#: templates/js/translated/order.js:2086 templates/js/translated/order.js:3779
msgid "Duplicate line"
msgstr ""
-#: templates/js/translated/order.js:1980 templates/js/translated/order.js:3622
+#: templates/js/translated/order.js:2087 templates/js/translated/order.js:3780
msgid "Edit line"
msgstr ""
-#: templates/js/translated/order.js:1981 templates/js/translated/order.js:3623
+#: templates/js/translated/order.js:2088 templates/js/translated/order.js:3781
msgid "Delete line"
msgstr ""
-#: templates/js/translated/order.js:2011 templates/js/translated/order.js:3653
+#: templates/js/translated/order.js:2118 templates/js/translated/order.js:3811
msgid "Duplicate Line"
msgstr ""
-#: templates/js/translated/order.js:2032 templates/js/translated/order.js:3674
+#: templates/js/translated/order.js:2139 templates/js/translated/order.js:3832
msgid "Edit Line"
msgstr ""
-#: templates/js/translated/order.js:2043 templates/js/translated/order.js:3685
+#: templates/js/translated/order.js:2150 templates/js/translated/order.js:3843
msgid "Delete Line"
msgstr ""
-#: templates/js/translated/order.js:2054
+#: templates/js/translated/order.js:2161
msgid "No matching line"
msgstr ""
-#: templates/js/translated/order.js:2095
+#: templates/js/translated/order.js:2202
msgid "No sales orders found"
msgstr ""
-#: templates/js/translated/order.js:2133
+#: templates/js/translated/order.js:2240
msgid "Invalid Customer"
msgstr ""
-#: templates/js/translated/order.js:2220
+#: templates/js/translated/order.js:2327
msgid "Edit shipment"
msgstr ""
-#: templates/js/translated/order.js:2223
+#: templates/js/translated/order.js:2330
msgid "Complete shipment"
msgstr ""
-#: templates/js/translated/order.js:2228
+#: templates/js/translated/order.js:2335
msgid "Delete shipment"
msgstr ""
-#: templates/js/translated/order.js:2248
+#: templates/js/translated/order.js:2355
msgid "Edit Shipment"
msgstr ""
-#: templates/js/translated/order.js:2265
+#: templates/js/translated/order.js:2372
msgid "Delete Shipment"
msgstr ""
-#: templates/js/translated/order.js:2299
+#: templates/js/translated/order.js:2406
msgid "No matching shipments found"
msgstr ""
-#: templates/js/translated/order.js:2309
+#: templates/js/translated/order.js:2416
msgid "Shipment Reference"
msgstr ""
-#: templates/js/translated/order.js:2333
+#: templates/js/translated/order.js:2440
msgid "Not shipped"
msgstr ""
-#: templates/js/translated/order.js:2339
+#: templates/js/translated/order.js:2446
msgid "Tracking"
msgstr ""
-#: templates/js/translated/order.js:2498
+#: templates/js/translated/order.js:2603
+msgid "Add Shipment"
+msgstr ""
+
+#: templates/js/translated/order.js:2654
msgid "Confirm stock allocation"
msgstr ""
-#: templates/js/translated/order.js:2499
+#: templates/js/translated/order.js:2655
msgid "Allocate Stock Items to Sales Order"
msgstr ""
-#: templates/js/translated/order.js:2707
+#: templates/js/translated/order.js:2863
msgid "No sales order allocations found"
msgstr ""
-#: templates/js/translated/order.js:2788
+#: templates/js/translated/order.js:2944
msgid "Edit Stock Allocation"
msgstr ""
-#: templates/js/translated/order.js:2805
+#: templates/js/translated/order.js:2961
msgid "Confirm Delete Operation"
msgstr ""
-#: templates/js/translated/order.js:2806
+#: templates/js/translated/order.js:2962
msgid "Delete Stock Allocation"
msgstr ""
-#: templates/js/translated/order.js:2849 templates/js/translated/order.js:2938
+#: templates/js/translated/order.js:3005 templates/js/translated/order.js:3094
#: templates/js/translated/stock.js:1545
msgid "Shipped to customer"
msgstr ""
-#: templates/js/translated/order.js:2857 templates/js/translated/order.js:2947
+#: templates/js/translated/order.js:3013 templates/js/translated/order.js:3103
msgid "Stock location not specified"
msgstr ""
-#: templates/js/translated/order.js:3229
+#: templates/js/translated/order.js:3385
msgid "Allocate serial numbers"
msgstr ""
-#: templates/js/translated/order.js:3235
+#: templates/js/translated/order.js:3391
msgid "Purchase stock"
msgstr ""
-#: templates/js/translated/order.js:3242 templates/js/translated/order.js:3438
+#: templates/js/translated/order.js:3398 templates/js/translated/order.js:3596
msgid "Calculate price"
msgstr ""
-#: templates/js/translated/order.js:3254
+#: templates/js/translated/order.js:3410
msgid "Cannot be deleted as items have been shipped"
msgstr ""
-#: templates/js/translated/order.js:3257
+#: templates/js/translated/order.js:3413
msgid "Cannot be deleted as items have been allocated"
msgstr ""
-#: templates/js/translated/order.js:3339
+#: templates/js/translated/order.js:3495
msgid "Allocate Serial Numbers"
msgstr ""
-#: templates/js/translated/order.js:3446
+#: templates/js/translated/order.js:3604
msgid "Update Unit Price"
msgstr ""
-#: templates/js/translated/order.js:3460
+#: templates/js/translated/order.js:3618
msgid "No matching line items"
msgstr ""
-#: templates/js/translated/order.js:3696
+#: templates/js/translated/order.js:3854
msgid "No matching lines"
msgstr ""
@@ -9316,11 +9371,11 @@ msgstr ""
msgid "Sales Order(s) must be selected before printing report"
msgstr ""
-#: templates/js/translated/search.js:286
+#: templates/js/translated/search.js:307
msgid "Minimize results"
msgstr ""
-#: templates/js/translated/search.js:289
+#: templates/js/translated/search.js:310
msgid "Remove results"
msgstr ""
@@ -9456,7 +9511,7 @@ msgstr ""
msgid "Add Stock"
msgstr ""
-#: templates/js/translated/stock.js:887 users/models.py:217
+#: templates/js/translated/stock.js:887 users/models.py:216
msgid "Add"
msgstr ""
@@ -10171,58 +10226,58 @@ msgstr ""
msgid "No"
msgstr ""
-#: users/admin.py:62
+#: users/admin.py:61
msgid "Users"
msgstr ""
-#: users/admin.py:63
+#: users/admin.py:62
msgid "Select which users are assigned to this group"
msgstr ""
-#: users/admin.py:185
+#: users/admin.py:184
msgid "The following users are members of multiple groups:"
msgstr ""
-#: users/admin.py:208
+#: users/admin.py:207
msgid "Personal info"
msgstr ""
-#: users/admin.py:209
+#: users/admin.py:208
msgid "Permissions"
msgstr ""
-#: users/admin.py:212
+#: users/admin.py:211
msgid "Important dates"
msgstr ""
-#: users/models.py:204
+#: users/models.py:203
msgid "Permission set"
msgstr ""
-#: users/models.py:212
+#: users/models.py:211
msgid "Group"
msgstr ""
-#: users/models.py:215
+#: users/models.py:214
msgid "View"
msgstr ""
-#: users/models.py:215
+#: users/models.py:214
msgid "Permission to view items"
msgstr ""
-#: users/models.py:217
+#: users/models.py:216
msgid "Permission to add items"
msgstr ""
-#: users/models.py:219
+#: users/models.py:218
msgid "Change"
msgstr ""
-#: users/models.py:219
+#: users/models.py:218
msgid "Permissions to edit items"
msgstr ""
-#: users/models.py:221
+#: users/models.py:220
msgid "Permission to delete items"
msgstr ""
diff --git a/InvenTree/locale/ru/LC_MESSAGES/django.po b/InvenTree/locale/ru/LC_MESSAGES/django.po
index a3386408a9..340465e5cc 100644
--- a/InvenTree/locale/ru/LC_MESSAGES/django.po
+++ b/InvenTree/locale/ru/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-05-20 10:47+0000\n"
-"PO-Revision-Date: 2022-05-21 01:06\n"
+"POT-Creation-Date: 2022-05-23 23:24+0000\n"
+"PO-Revision-Date: 2022-05-24 01:42\n"
"Last-Translator: \n"
"Language-Team: Russian\n"
"Language: ru_RU\n"
@@ -17,20 +17,20 @@ msgstr ""
"X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 154\n"
-#: InvenTree/api.py:50
+#: InvenTree/api.py:49
msgid "API endpoint not found"
msgstr "Конечная точка API не обнаружена"
-#: InvenTree/exceptions.py:47
+#: InvenTree/exceptions.py:46
msgid "Error details can be found in the admin panel"
msgstr ""
-#: InvenTree/fields.py:98
+#: InvenTree/fields.py:96
msgid "Enter date"
msgstr "Введите дату"
#: InvenTree/forms.py:124 templates/account/email_confirm.html:20
-#: templates/js/translated/forms.js:615
+#: templates/js/translated/forms.js:620
msgid "Confirm"
msgstr "Подтвердить"
@@ -79,7 +79,7 @@ msgstr "Вы должны вводить один и тот же адрес эл
msgid "Duplicate serial: {sn}"
msgstr "Повторяющийся серийный номер: {sn}"
-#: InvenTree/helpers.py:456 order/models.py:311 order/models.py:465
+#: InvenTree/helpers.py:456 order/models.py:307 order/models.py:461
msgid "Invalid quantity provided"
msgstr "недопустимое количество"
@@ -116,89 +116,89 @@ msgstr "Серийных номеров не найдено"
msgid "Number of unique serial numbers ({s}) must match quantity ({q})"
msgstr ""
-#: InvenTree/models.py:183
+#: InvenTree/models.py:181
msgid "Missing file"
msgstr "Файл не найден"
-#: InvenTree/models.py:184
+#: InvenTree/models.py:182
msgid "Missing external link"
msgstr "Отсутствует внешняя ссылка"
-#: InvenTree/models.py:195 stock/models.py:2211
+#: InvenTree/models.py:193 stock/models.py:2202
#: templates/js/translated/attachment.js:119
msgid "Attachment"
msgstr "Вложения"
-#: InvenTree/models.py:196
+#: InvenTree/models.py:194
msgid "Select file to attach"
msgstr "Выберите файл для вложения"
-#: InvenTree/models.py:202 company/models.py:129 company/models.py:343
-#: company/models.py:575 order/models.py:136 part/models.py:867
+#: InvenTree/models.py:200 company/models.py:123 company/models.py:337
+#: company/models.py:569 order/models.py:132 part/models.py:855
#: report/templates/report/inventree_build_order_base.html:165
#: templates/js/translated/company.js:540
#: templates/js/translated/company.js:829 templates/js/translated/part.js:1441
msgid "Link"
msgstr "Ссылка"
-#: InvenTree/models.py:203 build/models.py:330 part/models.py:868
-#: stock/models.py:674
+#: InvenTree/models.py:201 build/models.py:330 part/models.py:856
+#: stock/models.py:665
msgid "Link to external URL"
msgstr "Ссылка на внешний URL"
-#: InvenTree/models.py:206 templates/js/translated/attachment.js:163
+#: InvenTree/models.py:204 templates/js/translated/attachment.js:163
msgid "Comment"
msgstr "Комментарий"
-#: InvenTree/models.py:206
+#: InvenTree/models.py:204
msgid "File comment"
msgstr "Комментарий к файлу"
-#: InvenTree/models.py:212 InvenTree/models.py:213 common/models.py:1571
-#: common/models.py:1572 common/models.py:1806 common/models.py:1807
-#: common/models.py:2034 common/models.py:2035 part/models.py:2369
-#: part/models.py:2389 plugin/models.py:261 plugin/models.py:262
+#: InvenTree/models.py:210 InvenTree/models.py:211 common/models.py:1567
+#: common/models.py:1568 common/models.py:1802 common/models.py:1803
+#: common/models.py:2030 common/models.py:2031 part/models.py:2357
+#: part/models.py:2377 plugin/models.py:260 plugin/models.py:261
#: report/templates/report/inventree_test_report_base.html:96
#: templates/js/translated/stock.js:2518
msgid "User"
msgstr "Пользователь"
-#: InvenTree/models.py:216
+#: InvenTree/models.py:214
msgid "upload date"
msgstr "дата загрузки"
-#: InvenTree/models.py:239
+#: InvenTree/models.py:237
msgid "Filename must not be empty"
msgstr "Имя файла не должно быть пустым"
-#: InvenTree/models.py:262
+#: InvenTree/models.py:260
msgid "Invalid attachment directory"
msgstr "Неверная директория вложений"
-#: InvenTree/models.py:272
+#: InvenTree/models.py:270
#, python-brace-format
msgid "Filename contains illegal character '{c}'"
msgstr "Имя файла содержит запрещенные символы '{c}'"
-#: InvenTree/models.py:275
+#: InvenTree/models.py:273
msgid "Filename missing extension"
msgstr "Отсутствует расширение для имени файла"
-#: InvenTree/models.py:282
+#: InvenTree/models.py:280
msgid "Attachment with this filename already exists"
msgstr "Вложение с таким именем файла уже существует"
-#: InvenTree/models.py:289
+#: InvenTree/models.py:287
msgid "Error renaming file"
msgstr "Ошибка переименования файла"
-#: InvenTree/models.py:324
+#: InvenTree/models.py:322
msgid "Invalid choice"
msgstr "Неверный выбор"
-#: InvenTree/models.py:340 InvenTree/models.py:341 common/models.py:1792
-#: company/models.py:426 label/models.py:109 part/models.py:811
-#: part/models.py:2553 plugin/models.py:100 report/models.py:174
+#: InvenTree/models.py:338 InvenTree/models.py:339 common/models.py:1788
+#: company/models.py:420 label/models.py:104 part/models.py:799
+#: part/models.py:2541 plugin/models.py:99 report/models.py:169
#: templates/InvenTree/notifications/notifications.html:84
#: templates/InvenTree/settings/mixins/urls.html:13
#: templates/InvenTree/settings/plugin.html:49
@@ -211,23 +211,23 @@ msgstr "Неверный выбор"
msgid "Name"
msgstr "Название"
-#: InvenTree/models.py:347 build/models.py:207
-#: build/templates/build/detail.html:24 company/models.py:349
-#: company/models.py:581 company/templates/company/company_base.html:71
+#: InvenTree/models.py:345 build/models.py:207
+#: build/templates/build/detail.html:24 company/models.py:343
+#: company/models.py:575 company/templates/company/company_base.html:71
#: company/templates/company/manufacturer_part.html:75
-#: company/templates/company/supplier_part.html:73 label/models.py:116
-#: order/models.py:134 part/models.py:834 part/templates/part/category.html:74
+#: company/templates/company/supplier_part.html:73 label/models.py:111
+#: order/models.py:130 part/models.py:822 part/templates/part/category.html:74
#: part/templates/part/part_base.html:167
-#: part/templates/part/set_category.html:14 report/models.py:187
-#: report/models.py:552 report/models.py:591
+#: part/templates/part/set_category.html:14 report/models.py:182
+#: report/models.py:547 report/models.py:586
#: report/templates/report/inventree_build_order_base.html:118
#: stock/templates/stock/location.html:103
#: templates/InvenTree/settings/plugin_settings.html:33
#: templates/js/translated/bom.js:553 templates/js/translated/bom.js:872
#: templates/js/translated/build.js:2408 templates/js/translated/company.js:345
#: templates/js/translated/company.js:551
-#: templates/js/translated/company.js:840 templates/js/translated/order.js:1456
-#: templates/js/translated/order.js:1664 templates/js/translated/order.js:2148
+#: templates/js/translated/company.js:840 templates/js/translated/order.js:1562
+#: templates/js/translated/order.js:1770 templates/js/translated/order.js:2254
#: templates/js/translated/part.js:674 templates/js/translated/part.js:1082
#: templates/js/translated/part.js:1355 templates/js/translated/part.js:1755
#: templates/js/translated/part.js:1824 templates/js/translated/stock.js:1686
@@ -235,173 +235,173 @@ msgstr "Название"
msgid "Description"
msgstr "Описание"
-#: InvenTree/models.py:348
+#: InvenTree/models.py:346
msgid "Description (optional)"
msgstr "Описание (необязательно)"
-#: InvenTree/models.py:356
+#: InvenTree/models.py:354
msgid "parent"
msgstr "родитель"
-#: InvenTree/serializers.py:62 part/models.py:2886
+#: InvenTree/serializers.py:59 part/models.py:2874
msgid "Must be a valid number"
msgstr "Должно быть действительным номером"
-#: InvenTree/serializers.py:296
+#: InvenTree/serializers.py:293
msgid "Filename"
msgstr "Имя файла"
-#: InvenTree/serializers.py:331
+#: InvenTree/serializers.py:328
msgid "Invalid value"
msgstr "Неверное значение"
-#: InvenTree/serializers.py:352
+#: InvenTree/serializers.py:349
msgid "Data File"
msgstr "Файл данных"
-#: InvenTree/serializers.py:353
+#: InvenTree/serializers.py:350
msgid "Select data file for upload"
msgstr "Выберите файл данных для загрузки"
-#: InvenTree/serializers.py:377
+#: InvenTree/serializers.py:374
msgid "Unsupported file type"
msgstr "Неподдерживаемый тип файла"
-#: InvenTree/serializers.py:383
+#: InvenTree/serializers.py:380
msgid "File is too large"
msgstr "Файл слишком большой"
-#: InvenTree/serializers.py:404
+#: InvenTree/serializers.py:401
msgid "No columns found in file"
msgstr "Столбцы в файле не найдены"
-#: InvenTree/serializers.py:407
+#: InvenTree/serializers.py:404
msgid "No data rows found in file"
msgstr "Строки данных в файле не найдены"
-#: InvenTree/serializers.py:533
+#: InvenTree/serializers.py:530
msgid "No data rows provided"
msgstr "Строки данных в файле не найдены"
-#: InvenTree/serializers.py:536
+#: InvenTree/serializers.py:533
msgid "No data columns supplied"
msgstr ""
-#: InvenTree/serializers.py:623
+#: InvenTree/serializers.py:620
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr ""
-#: InvenTree/serializers.py:632
+#: InvenTree/serializers.py:629
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Повторяющийся столбец: '{col}'"
-#: InvenTree/settings.py:672
+#: InvenTree/settings.py:669
msgid "Czech"
msgstr ""
-#: InvenTree/settings.py:673
+#: InvenTree/settings.py:670
msgid "German"
msgstr "Немецкий"
-#: InvenTree/settings.py:674
+#: InvenTree/settings.py:671
msgid "Greek"
msgstr "Греческий"
-#: InvenTree/settings.py:675
+#: InvenTree/settings.py:672
msgid "English"
msgstr "Английский"
-#: InvenTree/settings.py:676
+#: InvenTree/settings.py:673
msgid "Spanish"
msgstr "Испанский"
-#: InvenTree/settings.py:677
+#: InvenTree/settings.py:674
msgid "Spanish (Mexican)"
msgstr "Испанский (Мексика)"
-#: InvenTree/settings.py:678
+#: InvenTree/settings.py:675
msgid "Farsi / Persian"
msgstr ""
-#: InvenTree/settings.py:679
+#: InvenTree/settings.py:676
msgid "French"
msgstr "Французский"
-#: InvenTree/settings.py:680
+#: InvenTree/settings.py:677
msgid "Hebrew"
msgstr "Иврит"
-#: InvenTree/settings.py:681
+#: InvenTree/settings.py:678
msgid "Hungarian"
msgstr "Венгерский"
-#: InvenTree/settings.py:682
+#: InvenTree/settings.py:679
msgid "Italian"
msgstr "Итальянский"
-#: InvenTree/settings.py:683
+#: InvenTree/settings.py:680
msgid "Japanese"
msgstr "Японский"
-#: InvenTree/settings.py:684
+#: InvenTree/settings.py:681
msgid "Korean"
msgstr "Корейский"
-#: InvenTree/settings.py:685
+#: InvenTree/settings.py:682
msgid "Dutch"
msgstr "Голландский"
-#: InvenTree/settings.py:686
+#: InvenTree/settings.py:683
msgid "Norwegian"
msgstr "Норвежский"
-#: InvenTree/settings.py:687
+#: InvenTree/settings.py:684
msgid "Polish"
msgstr "Польский"
-#: InvenTree/settings.py:688
+#: InvenTree/settings.py:685
msgid "Portuguese"
msgstr ""
-#: InvenTree/settings.py:689
+#: InvenTree/settings.py:686
msgid "Portuguese (Brazilian)"
msgstr ""
-#: InvenTree/settings.py:690
+#: InvenTree/settings.py:687
msgid "Russian"
msgstr "Русский"
-#: InvenTree/settings.py:691
+#: InvenTree/settings.py:688
msgid "Swedish"
msgstr "Шведский"
-#: InvenTree/settings.py:692
+#: InvenTree/settings.py:689
msgid "Thai"
msgstr "Тайский"
-#: InvenTree/settings.py:693
+#: InvenTree/settings.py:690
msgid "Turkish"
msgstr "Турецкий"
-#: InvenTree/settings.py:694
+#: InvenTree/settings.py:691
msgid "Vietnamese"
msgstr "Вьетнамский"
-#: InvenTree/settings.py:695
+#: InvenTree/settings.py:692
msgid "Chinese"
msgstr "Китайский"
-#: InvenTree/status.py:110
+#: InvenTree/status.py:108
msgid "Background worker check failed"
msgstr "Проверка фонового работника не удалась"
-#: InvenTree/status.py:114
+#: InvenTree/status.py:112
msgid "Email backend not configured"
msgstr "Сервер электронной почты не настроен"
-#: InvenTree/status.py:117
+#: InvenTree/status.py:115
msgid "InvenTree system health checks failed"
msgstr "Ошибка проверки состояния системы InvenTree"
@@ -416,7 +416,7 @@ msgstr "Размещены"
#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:326
#: order/templates/order/order_base.html:134
-#: order/templates/order/sales_order_base.html:132
+#: order/templates/order/sales_order_base.html:133
msgid "Complete"
msgstr "Готово"
@@ -435,8 +435,8 @@ msgstr "Потерян"
msgid "Returned"
msgstr "Возвращено"
-#: InvenTree/status_codes.py:143 order/models.py:1087
-#: templates/js/translated/order.js:2871 templates/js/translated/order.js:3188
+#: InvenTree/status_codes.py:143 order/models.py:1083
+#: templates/js/translated/order.js:3026 templates/js/translated/order.js:3343
msgid "Shipped"
msgstr "Доставлено"
@@ -552,63 +552,63 @@ msgstr "Получено по заказу на покупку"
msgid "Production"
msgstr "Продукция"
-#: InvenTree/validators.py:25
+#: InvenTree/validators.py:23
msgid "Not a valid currency code"
msgstr "Неверный код валюты"
-#: InvenTree/validators.py:53
+#: InvenTree/validators.py:51
msgid "Invalid character in part name"
msgstr "Неверный символ в названии части"
-#: InvenTree/validators.py:66
+#: InvenTree/validators.py:64
#, python-brace-format
msgid "IPN must match regex pattern {pat}"
msgstr "IPN должен совпадать с регулярным выражением {pat}"
-#: InvenTree/validators.py:80 InvenTree/validators.py:94
-#: InvenTree/validators.py:108
+#: InvenTree/validators.py:78 InvenTree/validators.py:92
+#: InvenTree/validators.py:106
#, python-brace-format
msgid "Reference must match pattern {pattern}"
msgstr "Ссылка должна соответствовать шаблону {pattern}"
-#: InvenTree/validators.py:116
+#: InvenTree/validators.py:114
#, python-brace-format
msgid "Illegal character in name ({x})"
msgstr "Недопустимый символ в имени ({x})"
-#: InvenTree/validators.py:137 InvenTree/validators.py:153
+#: InvenTree/validators.py:135 InvenTree/validators.py:151
msgid "Overage value must not be negative"
msgstr "Значение перегрузки не должно быть отрицательным"
-#: InvenTree/validators.py:155
+#: InvenTree/validators.py:153
msgid "Overage must not exceed 100%"
msgstr "Перегрузка не может превысить 100%"
-#: InvenTree/validators.py:162
+#: InvenTree/validators.py:160
msgid "Invalid value for overage"
msgstr ""
-#: InvenTree/views.py:535
+#: InvenTree/views.py:534
msgid "Delete Item"
msgstr "Удалить элемент"
-#: InvenTree/views.py:584
+#: InvenTree/views.py:583
msgid "Check box to confirm item deletion"
msgstr "Установите флажок для подтверждения удаления элемента"
-#: InvenTree/views.py:599 templates/InvenTree/settings/user.html:22
+#: InvenTree/views.py:598 templates/InvenTree/settings/user.html:22
msgid "Edit User Information"
msgstr "Редактировать информацию о пользователе"
-#: InvenTree/views.py:610 templates/InvenTree/settings/user.html:19
+#: InvenTree/views.py:609 templates/InvenTree/settings/user.html:19
msgid "Set Password"
msgstr "Установить пароль"
-#: InvenTree/views.py:629
+#: InvenTree/views.py:628
msgid "Password fields must match"
msgstr "Пароли должны совпадать"
-#: InvenTree/views.py:876 templates/navbar.html:152
+#: InvenTree/views.py:875 templates/navbar.html:152
msgid "System Information"
msgstr "Информация о системе"
@@ -629,7 +629,7 @@ msgstr "Порядок сборки"
#: order/templates/order/so_sidebar.html:13
#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221
#: templates/InvenTree/search.html:139
-#: templates/InvenTree/settings/sidebar.html:45 users/models.py:44
+#: templates/InvenTree/settings/sidebar.html:45 users/models.py:42
msgid "Build Orders"
msgstr "Порядок сборки"
@@ -637,15 +637,15 @@ msgstr "Порядок сборки"
msgid "Build Order Reference"
msgstr "Ссылка на заказ"
-#: build/models.py:199 order/models.py:241 order/models.py:593
-#: order/models.py:888 part/models.py:2797
+#: build/models.py:199 order/models.py:237 order/models.py:589
+#: order/models.py:884 part/models.py:2785
#: part/templates/part/upload_bom.html:54
#: report/templates/report/inventree_po_report.html:91
#: report/templates/report/inventree_so_report.html:92
#: templates/js/translated/bom.js:688 templates/js/translated/bom.js:879
-#: templates/js/translated/build.js:1794 templates/js/translated/order.js:1695
-#: templates/js/translated/order.js:1896 templates/js/translated/order.js:3055
-#: templates/js/translated/order.js:3538
+#: templates/js/translated/build.js:1794 templates/js/translated/order.js:1801
+#: templates/js/translated/order.js:2002 templates/js/translated/order.js:3210
+#: templates/js/translated/order.js:3695
msgid "Reference"
msgstr "Отсылка"
@@ -663,12 +663,12 @@ msgid "BuildOrder to which this build is allocated"
msgstr ""
#: build/models.py:225 build/templates/build/build_base.html:77
-#: build/templates/build/detail.html:29 company/models.py:717
-#: order/models.py:987 order/models.py:1076 part/models.py:366
-#: part/models.py:2315 part/models.py:2331 part/models.py:2350
-#: part/models.py:2367 part/models.py:2469 part/models.py:2591
-#: part/models.py:2681 part/models.py:2772 part/models.py:3062
-#: part/serializers.py:922 part/templates/part/part_app_base.html:8
+#: build/templates/build/detail.html:29 company/models.py:711
+#: order/models.py:983 order/models.py:1072 part/models.py:354
+#: part/models.py:2303 part/models.py:2319 part/models.py:2338
+#: part/models.py:2355 part/models.py:2457 part/models.py:2579
+#: part/models.py:2669 part/models.py:2760 part/models.py:3050
+#: part/serializers.py:917 part/templates/part/part_app_base.html:8
#: part/templates/part/part_pricing.html:12
#: part/templates/part/set_category.html:13
#: part/templates/part/upload_bom.html:52
@@ -683,10 +683,10 @@ msgstr ""
#: templates/js/translated/build.js:1158 templates/js/translated/build.js:1664
#: templates/js/translated/build.js:2100 templates/js/translated/build.js:2413
#: templates/js/translated/company.js:492
-#: templates/js/translated/company.js:749 templates/js/translated/order.js:93
-#: templates/js/translated/order.js:762 templates/js/translated/order.js:1194
-#: templates/js/translated/order.js:1649 templates/js/translated/order.js:2475
-#: templates/js/translated/order.js:2824 templates/js/translated/order.js:3039
+#: templates/js/translated/company.js:749 templates/js/translated/order.js:94
+#: templates/js/translated/order.js:868 templates/js/translated/order.js:1300
+#: templates/js/translated/order.js:1755 templates/js/translated/order.js:2581
+#: templates/js/translated/order.js:2979 templates/js/translated/order.js:3194
#: templates/js/translated/part.js:1067 templates/js/translated/part.js:1137
#: templates/js/translated/part.js:1333 templates/js/translated/stock.js:531
#: templates/js/translated/stock.js:696 templates/js/translated/stock.js:903
@@ -708,7 +708,7 @@ msgid "SalesOrder to which this build is allocated"
msgstr ""
#: build/models.py:247 build/serializers.py:790
-#: templates/js/translated/build.js:2088 templates/js/translated/order.js:2463
+#: templates/js/translated/build.js:2088 templates/js/translated/order.js:2569
msgid "Source Location"
msgstr "Расположение источника"
@@ -748,8 +748,8 @@ msgstr "Статус сборки"
msgid "Build status code"
msgstr "Код статуса сборки"
-#: build/models.py:285 build/serializers.py:220 order/serializers.py:445
-#: stock/models.py:678 templates/js/translated/order.js:1054
+#: build/models.py:285 build/serializers.py:220 order/serializers.py:440
+#: stock/models.py:669 templates/js/translated/order.js:1160
msgid "Batch Code"
msgstr "Код партии"
@@ -757,12 +757,12 @@ msgstr "Код партии"
msgid "Batch code for this build output"
msgstr "Код партии для этого вывода сборки"
-#: build/models.py:292 order/models.py:138 part/models.py:1006
-#: part/templates/part/part_base.html:305 templates/js/translated/order.js:2161
+#: build/models.py:292 order/models.py:134 part/models.py:994
+#: part/templates/part/part_base.html:305 templates/js/translated/order.js:2267
msgid "Creation Date"
msgstr "Дата создания"
-#: build/models.py:296 order/models.py:615
+#: build/models.py:296 order/models.py:611
msgid "Target completion date"
msgstr "Целевая дата завершения"
@@ -770,7 +770,7 @@ msgstr "Целевая дата завершения"
msgid "Target date for build completion. Build will be overdue after this date."
msgstr "Целевая дата для сборки. Сборка будет просрочена после этой даты."
-#: build/models.py:300 order/models.py:284
+#: build/models.py:300 order/models.py:280
#: templates/js/translated/build.js:2490
msgid "Completion Date"
msgstr "Дата завершения"
@@ -788,11 +788,11 @@ msgid "User who issued this build order"
msgstr "Пользователь, выпустивший этот заказ на сборку"
#: build/models.py:323 build/templates/build/build_base.html:190
-#: build/templates/build/detail.html:115 order/models.py:152
+#: build/templates/build/detail.html:115 order/models.py:148
#: order/templates/order/order_base.html:176
-#: order/templates/order/sales_order_base.html:182 part/models.py:1010
+#: order/templates/order/sales_order_base.html:183 part/models.py:998
#: report/templates/report/inventree_build_order_base.html:159
-#: templates/js/translated/build.js:2470 templates/js/translated/order.js:1490
+#: templates/js/translated/build.js:2470 templates/js/translated/order.js:1596
msgid "Responsible"
msgstr "Ответственный"
@@ -803,27 +803,27 @@ msgstr "Пользователь, ответственный за этот за
#: build/models.py:329 build/templates/build/detail.html:101
#: company/templates/company/manufacturer_part.html:107
#: company/templates/company/supplier_part.html:132
-#: part/templates/part/part_base.html:346 stock/models.py:672
+#: part/templates/part/part_base.html:346 stock/models.py:663
#: stock/templates/stock/item_base.html:363
msgid "External Link"
msgstr "Внешняя ссылка"
#: build/models.py:334 build/serializers.py:390
-#: build/templates/build/sidebar.html:21 company/models.py:140
-#: company/models.py:588 company/templates/company/sidebar.html:25
-#: order/models.py:156 order/models.py:890 order/models.py:1197
+#: build/templates/build/sidebar.html:21 company/models.py:134
+#: company/models.py:582 company/templates/company/sidebar.html:25
+#: order/models.py:152 order/models.py:886 order/models.py:1193
#: order/templates/order/po_sidebar.html:11
-#: order/templates/order/so_sidebar.html:17 part/models.py:995
+#: order/templates/order/so_sidebar.html:17 part/models.py:983
#: part/templates/part/part_sidebar.html:59
#: report/templates/report/inventree_build_order_base.html:173
-#: stock/models.py:745 stock/models.py:2111 stock/models.py:2217
-#: stock/serializers.py:329 stock/serializers.py:467 stock/serializers.py:736
-#: stock/serializers.py:834 stock/serializers.py:966
+#: stock/models.py:736 stock/models.py:2102 stock/models.py:2208
+#: stock/serializers.py:321 stock/serializers.py:459 stock/serializers.py:728
+#: stock/serializers.py:826 stock/serializers.py:958
#: stock/templates/stock/stock_sidebar.html:25
#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1065
-#: templates/js/translated/company.js:845 templates/js/translated/order.js:1816
-#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2344
-#: templates/js/translated/order.js:3213 templates/js/translated/order.js:3609
+#: templates/js/translated/company.js:845 templates/js/translated/order.js:1922
+#: templates/js/translated/order.js:2073 templates/js/translated/order.js:2450
+#: templates/js/translated/order.js:3368 templates/js/translated/order.js:3766
#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1922
msgid "Notes"
msgstr "Заметки"
@@ -857,7 +857,7 @@ msgstr ""
msgid "Stock item is over-allocated"
msgstr "Предмет на складе перераспределен"
-#: build/models.py:1238 order/models.py:1324
+#: build/models.py:1238 order/models.py:1329
msgid "Allocation quantity must be greater than zero"
msgstr "Выделенное количество должно быть больше нуля"
@@ -879,16 +879,16 @@ msgstr "Сборка"
msgid "Build to allocate parts"
msgstr ""
-#: build/models.py:1392 build/serializers.py:631 order/serializers.py:958
-#: order/serializers.py:976 stock/serializers.py:401 stock/serializers.py:674
-#: stock/serializers.py:792 stock/templates/stock/item_base.html:10
+#: build/models.py:1392 build/serializers.py:631 order/serializers.py:961
+#: order/serializers.py:979 stock/serializers.py:393 stock/serializers.py:666
+#: stock/serializers.py:784 stock/templates/stock/item_base.html:10
#: stock/templates/stock/item_base.html:23
#: stock/templates/stock/item_base.html:357
#: templates/js/translated/build.js:738 templates/js/translated/build.js:743
#: templates/js/translated/build.js:2102 templates/js/translated/build.js:2538
-#: templates/js/translated/order.js:94 templates/js/translated/order.js:2476
-#: templates/js/translated/order.js:2731 templates/js/translated/order.js:2736
-#: templates/js/translated/order.js:2831 templates/js/translated/order.js:2921
+#: templates/js/translated/order.js:95 templates/js/translated/order.js:2582
+#: templates/js/translated/order.js:2886 templates/js/translated/order.js:2891
+#: templates/js/translated/order.js:2986 templates/js/translated/order.js:3076
#: templates/js/translated/stock.js:532 templates/js/translated/stock.js:697
#: templates/js/translated/stock.js:2454
msgid "Stock Item"
@@ -900,11 +900,11 @@ msgstr "Исходный складской предмет"
#: build/models.py:1405 build/serializers.py:190
#: build/templates/build/build_base.html:82
-#: build/templates/build/detail.html:34 common/models.py:1614
-#: company/forms.py:39 company/templates/company/supplier_part.html:258
-#: order/models.py:881 order/models.py:1364 order/serializers.py:1097
-#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:123
-#: part/forms.py:139 part/forms.py:155 part/models.py:2788
+#: build/templates/build/detail.html:34 common/models.py:1610
+#: company/forms.py:38 company/templates/company/supplier_part.html:258
+#: order/models.py:877 order/models.py:1369 order/serializers.py:1100
+#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:121
+#: part/forms.py:137 part/forms.py:153 part/models.py:2776
#: part/templates/part/detail.html:953 part/templates/part/detail.html:1039
#: part/templates/part/part_pricing.html:16
#: part/templates/part/upload_bom.html:53
@@ -913,7 +913,7 @@ msgstr "Исходный складской предмет"
#: report/templates/report/inventree_so_report.html:91
#: report/templates/report/inventree_test_report_base.html:81
#: report/templates/report/inventree_test_report_base.html:139
-#: stock/serializers.py:290 stock/templates/stock/item_base.html:187
+#: stock/serializers.py:282 stock/templates/stock/item_base.html:187
#: stock/templates/stock/item_base.html:252
#: stock/templates/stock/item_base.html:260
#: templates/js/translated/barcode.js:437 templates/js/translated/bom.js:689
@@ -922,11 +922,11 @@ msgstr "Исходный складской предмет"
#: templates/js/translated/build.js:1180 templates/js/translated/build.js:1690
#: templates/js/translated/build.js:2103
#: templates/js/translated/model_renderers.js:108
-#: templates/js/translated/order.js:110 templates/js/translated/order.js:765
-#: templates/js/translated/order.js:1701 templates/js/translated/order.js:1902
-#: templates/js/translated/order.js:2477 templates/js/translated/order.js:2750
-#: templates/js/translated/order.js:2838 templates/js/translated/order.js:2927
-#: templates/js/translated/order.js:3061 templates/js/translated/order.js:3544
+#: templates/js/translated/order.js:111 templates/js/translated/order.js:871
+#: templates/js/translated/order.js:1807 templates/js/translated/order.js:2008
+#: templates/js/translated/order.js:2583 templates/js/translated/order.js:2905
+#: templates/js/translated/order.js:2993 templates/js/translated/order.js:3082
+#: templates/js/translated/order.js:3216 templates/js/translated/order.js:3701
#: templates/js/translated/part.js:967 templates/js/translated/part.js:1969
#: templates/js/translated/part.js:2200 templates/js/translated/part.js:2234
#: templates/js/translated/part.js:2312 templates/js/translated/stock.js:403
@@ -972,10 +972,10 @@ msgstr ""
msgid "Enter quantity for build output"
msgstr "Введите количество для вывода сборки"
-#: build/serializers.py:203 build/serializers.py:651 order/models.py:309
-#: order/serializers.py:294 order/serializers.py:440 part/serializers.py:593
-#: part/serializers.py:1089 stock/models.py:505 stock/models.py:1316
-#: stock/serializers.py:302
+#: build/serializers.py:203 build/serializers.py:651 order/models.py:305
+#: order/serializers.py:289 order/serializers.py:435 part/serializers.py:588
+#: part/serializers.py:1084 stock/models.py:496 stock/models.py:1307
+#: stock/serializers.py:294
msgid "Quantity must be greater than zero"
msgstr "Количество должно быть больше нуля"
@@ -987,8 +987,8 @@ msgstr ""
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:227 order/serializers.py:453 order/serializers.py:1101
-#: stock/serializers.py:311 templates/js/translated/order.js:1065
+#: build/serializers.py:227 order/serializers.py:448 order/serializers.py:1104
+#: stock/serializers.py:303 templates/js/translated/order.js:1171
#: templates/js/translated/stock.js:238 templates/js/translated/stock.js:404
msgid "Serial Numbers"
msgstr "Серийные номера"
@@ -1005,7 +1005,7 @@ msgstr ""
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:276 stock/api.py:602
+#: build/serializers.py:276 stock/api.py:590
msgid "The following serial numbers already exist"
msgstr ""
@@ -1013,14 +1013,14 @@ msgstr ""
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:372 order/serializers.py:426 order/serializers.py:531
-#: stock/serializers.py:322 stock/serializers.py:462 stock/serializers.py:827
-#: stock/serializers.py:1068 stock/templates/stock/item_base.html:303
+#: build/serializers.py:372 order/serializers.py:421 order/serializers.py:526
+#: stock/serializers.py:314 stock/serializers.py:454 stock/serializers.py:819
+#: stock/serializers.py:1060 stock/templates/stock/item_base.html:303
#: templates/js/translated/barcode.js:436
#: templates/js/translated/barcode.js:618 templates/js/translated/build.js:750
-#: templates/js/translated/build.js:1702 templates/js/translated/order.js:1092
-#: templates/js/translated/order.js:2743 templates/js/translated/order.js:2846
-#: templates/js/translated/order.js:2854 templates/js/translated/order.js:2935
+#: templates/js/translated/build.js:1702 templates/js/translated/order.js:1198
+#: templates/js/translated/order.js:2898 templates/js/translated/order.js:3001
+#: templates/js/translated/order.js:3009 templates/js/translated/order.js:3090
#: templates/js/translated/part.js:180 templates/js/translated/stock.js:533
#: templates/js/translated/stock.js:698 templates/js/translated/stock.js:905
#: templates/js/translated/stock.js:1793 templates/js/translated/stock.js:2395
@@ -1032,11 +1032,11 @@ msgid "Location for completed build outputs"
msgstr ""
#: build/serializers.py:379 build/templates/build/build_base.html:142
-#: build/templates/build/detail.html:62 order/models.py:609
-#: order/serializers.py:463 stock/templates/stock/item_base.html:193
+#: build/templates/build/detail.html:62 order/models.py:605
+#: order/serializers.py:458 stock/templates/stock/item_base.html:193
#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2442
-#: templates/js/translated/order.js:1199 templates/js/translated/order.js:1460
-#: templates/js/translated/order.js:2153 templates/js/translated/stock.js:1768
+#: templates/js/translated/order.js:1305 templates/js/translated/order.js:1566
+#: templates/js/translated/order.js:2259 templates/js/translated/stock.js:1768
#: templates/js/translated/stock.js:2472 templates/js/translated/stock.js:2604
msgid "Status"
msgstr "Статус"
@@ -1097,8 +1097,8 @@ msgstr ""
msgid "No build outputs have been created for this build order"
msgstr ""
-#: build/serializers.py:556 build/serializers.py:605 part/models.py:2912
-#: part/models.py:3054
+#: build/serializers.py:556 build/serializers.py:605 part/models.py:2900
+#: part/models.py:3042
msgid "BOM Item"
msgstr "BOM Компонент"
@@ -1114,11 +1114,11 @@ msgstr ""
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:637 stock/serializers.py:681
+#: build/serializers.py:637 stock/serializers.py:673
msgid "Item must be in stock"
msgstr "Компонент должен быть в наличии"
-#: build/serializers.py:694 order/serializers.py:1009
+#: build/serializers.py:694 order/serializers.py:1012
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Превышено доступное количество ({q})"
@@ -1135,7 +1135,7 @@ msgstr ""
msgid "This stock item has already been allocated to this build output"
msgstr ""
-#: build/serializers.py:739 order/serializers.py:1271
+#: build/serializers.py:739 order/serializers.py:1274
msgid "Allocation items must be provided"
msgstr ""
@@ -1233,13 +1233,13 @@ msgid "Stock has not been fully allocated to this Build Order"
msgstr ""
#: build/templates/build/build_base.html:151
-#: build/templates/build/detail.html:131 order/models.py:894
+#: build/templates/build/detail.html:131 order/models.py:890
#: order/templates/order/order_base.html:162
-#: order/templates/order/sales_order_base.html:163
+#: order/templates/order/sales_order_base.html:164
#: report/templates/report/inventree_build_order_base.html:126
-#: templates/js/translated/build.js:2482 templates/js/translated/order.js:1477
-#: templates/js/translated/order.js:1763 templates/js/translated/order.js:2169
-#: templates/js/translated/order.js:3124 templates/js/translated/part.js:971
+#: templates/js/translated/build.js:2482 templates/js/translated/order.js:1583
+#: templates/js/translated/order.js:1869 templates/js/translated/order.js:2275
+#: templates/js/translated/order.js:3279 templates/js/translated/part.js:971
msgid "Target Date"
msgstr "Целевая дата"
@@ -1251,7 +1251,7 @@ msgstr ""
#: build/templates/build/build_base.html:156
#: build/templates/build/build_base.html:201
#: order/templates/order/order_base.html:98
-#: order/templates/order/sales_order_base.html:93
+#: order/templates/order/sales_order_base.html:94
#: templates/js/translated/table_filters.js:312
#: templates/js/translated/table_filters.js:353
#: templates/js/translated/table_filters.js:383
@@ -1260,20 +1260,20 @@ msgstr "Просрочено"
#: build/templates/build/build_base.html:163
#: build/templates/build/detail.html:67 build/templates/build/detail.html:142
-#: order/templates/order/sales_order_base.html:170
+#: order/templates/order/sales_order_base.html:171
#: templates/js/translated/table_filters.js:392
msgid "Completed"
msgstr "Завершённые"
#: build/templates/build/build_base.html:176
-#: build/templates/build/detail.html:94 order/models.py:1073
-#: order/models.py:1169 order/models.py:1268
+#: build/templates/build/detail.html:94 order/models.py:1069
+#: order/models.py:1165 order/models.py:1273
#: order/templates/order/sales_order_base.html:9
#: order/templates/order/sales_order_base.html:28
#: report/templates/report/inventree_build_order_base.html:136
#: report/templates/report/inventree_so_report.html:77
#: stock/templates/stock/item_base.html:297
-#: templates/js/translated/order.js:2108
+#: templates/js/translated/order.js:2214
msgid "Sales Order"
msgstr "Заказ покупателя"
@@ -1308,8 +1308,8 @@ msgstr ""
msgid "Stock can be taken from any available location."
msgstr ""
-#: build/templates/build/detail.html:49 order/models.py:1009
-#: templates/js/translated/order.js:1200 templates/js/translated/order.js:1805
+#: build/templates/build/detail.html:49 order/models.py:1005
+#: templates/js/translated/order.js:1306 templates/js/translated/order.js:1911
msgid "Destination"
msgstr "Назначение"
@@ -1334,7 +1334,7 @@ msgstr "Партия"
#: build/templates/build/detail.html:126
#: order/templates/order/order_base.html:149
-#: order/templates/order/sales_order_base.html:157
+#: order/templates/order/sales_order_base.html:158
#: templates/js/translated/build.js:2450
msgid "Created"
msgstr "Создано"
@@ -1386,7 +1386,7 @@ msgstr ""
#: build/templates/build/detail.html:187
#: company/templates/company/detail.html:37
#: company/templates/company/detail.html:84
-#: part/templates/part/category.html:177 templates/js/translated/order.js:805
+#: part/templates/part/category.html:177 templates/js/translated/order.js:911
msgid "Order Parts"
msgstr "Заказать детали"
@@ -1516,23 +1516,23 @@ msgstr ""
msgid "Delete Build Order"
msgstr "Удалить заказ на сборку"
-#: common/files.py:65
+#: common/files.py:66
msgid "Unsupported file format: {ext.upper()}"
msgstr "Неподдерживаемый формат файла: {ext.upper()}"
-#: common/files.py:67
+#: common/files.py:68
msgid "Error reading file (invalid encoding)"
msgstr "Ошибка чтения файла (неверная кодировка)"
-#: common/files.py:72
+#: common/files.py:73
msgid "Error reading file (invalid format)"
msgstr "Ошибка чтения файла (неверный формат)"
-#: common/files.py:74
+#: common/files.py:75
msgid "Error reading file (incorrect dimension)"
msgstr "Ошибка чтения файла (неверный размер)"
-#: common/files.py:76
+#: common/files.py:77
msgid "Error reading file (data could be corrupted)"
msgstr "Ошибка чтения файла (данные могут быть повреждены)"
@@ -1553,888 +1553,888 @@ msgstr ""
msgid "Select {name} file to upload"
msgstr "Выберите {name} файл для загрузки"
-#: common/models.py:398
+#: common/models.py:394
msgid "Settings key (must be unique - case insensitive)"
msgstr ""
-#: common/models.py:400
+#: common/models.py:396
msgid "Settings value"
msgstr ""
-#: common/models.py:441
+#: common/models.py:437
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:461
+#: common/models.py:457
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:472
+#: common/models.py:468
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:521
+#: common/models.py:517
msgid "Key string must be unique"
msgstr ""
-#: common/models.py:743
+#: common/models.py:739
msgid "No group"
msgstr ""
-#: common/models.py:785
+#: common/models.py:781
msgid "Restart required"
msgstr "Требуется перезапуск"
-#: common/models.py:786
+#: common/models.py:782
msgid "A setting has been changed which requires a server restart"
msgstr ""
-#: common/models.py:793
+#: common/models.py:789
msgid "Server Instance Name"
msgstr ""
-#: common/models.py:795
+#: common/models.py:791
msgid "String descriptor for the server instance"
msgstr ""
-#: common/models.py:799
+#: common/models.py:795
msgid "Use instance name"
msgstr ""
-#: common/models.py:800
+#: common/models.py:796
msgid "Use the instance name in the title-bar"
msgstr ""
-#: common/models.py:806
+#: common/models.py:802
msgid "Restrict showing `about`"
msgstr ""
-#: common/models.py:807
+#: common/models.py:803
msgid "Show the `about` modal only to superusers"
msgstr ""
-#: common/models.py:813 company/models.py:98 company/models.py:99
+#: common/models.py:809 company/models.py:92 company/models.py:93
msgid "Company name"
msgstr "Название компании"
-#: common/models.py:814
+#: common/models.py:810
msgid "Internal company name"
msgstr "Внутреннее название компании"
-#: common/models.py:819
+#: common/models.py:815
msgid "Base URL"
msgstr "Базовая ссылка"
-#: common/models.py:820
+#: common/models.py:816
msgid "Base URL for server instance"
msgstr "Базовая ссылка для экземпляра сервера"
-#: common/models.py:826
+#: common/models.py:822
msgid "Default Currency"
msgstr "Валюта по умолчанию"
-#: common/models.py:827
+#: common/models.py:823
msgid "Default currency"
msgstr "Валюта по умолчанию"
-#: common/models.py:833
+#: common/models.py:829
msgid "Download from URL"
msgstr "Скачать по ссылке"
-#: common/models.py:834
+#: common/models.py:830
msgid "Allow download of remote images and files from external URL"
msgstr ""
-#: common/models.py:840 templates/InvenTree/settings/sidebar.html:33
+#: common/models.py:836 templates/InvenTree/settings/sidebar.html:33
msgid "Barcode Support"
msgstr ""
-#: common/models.py:841
+#: common/models.py:837
msgid "Enable barcode scanner support"
msgstr ""
-#: common/models.py:847
+#: common/models.py:843
msgid "Barcode Webcam Support"
msgstr ""
-#: common/models.py:848
+#: common/models.py:844
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/models.py:854
+#: common/models.py:850
msgid "IPN Regex"
msgstr ""
-#: common/models.py:855
+#: common/models.py:851
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/models.py:859
+#: common/models.py:855
msgid "Allow Duplicate IPN"
msgstr "Разрешить повторяющиеся IPN"
-#: common/models.py:860
+#: common/models.py:856
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/models.py:866
+#: common/models.py:862
msgid "Allow Editing IPN"
msgstr "Разрешить редактирование IPN"
-#: common/models.py:867
+#: common/models.py:863
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/models.py:873
+#: common/models.py:869
msgid "Copy Part BOM Data"
msgstr ""
-#: common/models.py:874
+#: common/models.py:870
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/models.py:880
+#: common/models.py:876
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/models.py:881
+#: common/models.py:877
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/models.py:887
+#: common/models.py:883
msgid "Copy Part Test Data"
msgstr ""
-#: common/models.py:888
+#: common/models.py:884
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/models.py:894
+#: common/models.py:890
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/models.py:895
+#: common/models.py:891
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/models.py:901 part/models.py:2593 report/models.py:180
+#: common/models.py:897 part/models.py:2581 report/models.py:175
#: templates/js/translated/table_filters.js:38
#: templates/js/translated/table_filters.js:444
msgid "Template"
msgstr "Шаблон"
-#: common/models.py:902
+#: common/models.py:898
msgid "Parts are templates by default"
msgstr "По умолчанию детали являются шаблонами"
-#: common/models.py:908 part/models.py:958 templates/js/translated/bom.js:1411
+#: common/models.py:904 part/models.py:946 templates/js/translated/bom.js:1411
#: templates/js/translated/table_filters.js:168
#: templates/js/translated/table_filters.js:460
msgid "Assembly"
msgstr "Сборка"
-#: common/models.py:909
+#: common/models.py:905
msgid "Parts can be assembled from other components by default"
msgstr ""
-#: common/models.py:915 part/models.py:964
+#: common/models.py:911 part/models.py:952
#: templates/js/translated/table_filters.js:464
msgid "Component"
msgstr "Компонент"
-#: common/models.py:916
+#: common/models.py:912
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/models.py:922 part/models.py:975
+#: common/models.py:918 part/models.py:963
msgid "Purchaseable"
msgstr ""
-#: common/models.py:923
+#: common/models.py:919
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/models.py:929 part/models.py:980
+#: common/models.py:925 part/models.py:968
#: templates/js/translated/table_filters.js:472
msgid "Salable"
msgstr "Можно продавать"
-#: common/models.py:930
+#: common/models.py:926
msgid "Parts are salable by default"
msgstr ""
-#: common/models.py:936 part/models.py:970
+#: common/models.py:932 part/models.py:958
#: templates/js/translated/table_filters.js:46
#: templates/js/translated/table_filters.js:100
#: templates/js/translated/table_filters.js:476
msgid "Trackable"
msgstr "Отслеживание"
-#: common/models.py:937
+#: common/models.py:933
msgid "Parts are trackable by default"
msgstr "По умолчанию детали являются отслеживаемыми"
-#: common/models.py:943 part/models.py:990
+#: common/models.py:939 part/models.py:978
#: part/templates/part/part_base.html:151
#: templates/js/translated/table_filters.js:42
msgid "Virtual"
msgstr ""
-#: common/models.py:944
+#: common/models.py:940
msgid "Parts are virtual by default"
msgstr ""
-#: common/models.py:950
+#: common/models.py:946
msgid "Show Import in Views"
msgstr ""
-#: common/models.py:951
+#: common/models.py:947
msgid "Display the import wizard in some part views"
msgstr ""
-#: common/models.py:957
+#: common/models.py:953
msgid "Show Price in Forms"
msgstr "Показывать цену в формах"
-#: common/models.py:958
+#: common/models.py:954
msgid "Display part price in some forms"
msgstr ""
-#: common/models.py:969
+#: common/models.py:965
msgid "Show Price in BOM"
msgstr "Показывать цену в BOM"
-#: common/models.py:970
+#: common/models.py:966
msgid "Include pricing information in BOM tables"
msgstr ""
-#: common/models.py:981
+#: common/models.py:977
msgid "Show Price History"
msgstr "Показывать историю цены"
-#: common/models.py:982
+#: common/models.py:978
msgid "Display historical pricing for Part"
msgstr ""
-#: common/models.py:988
+#: common/models.py:984
msgid "Show related parts"
msgstr "Показывать связанные детали"
-#: common/models.py:989
+#: common/models.py:985
msgid "Display related parts for a part"
msgstr ""
-#: common/models.py:995
+#: common/models.py:991
msgid "Create initial stock"
msgstr ""
-#: common/models.py:996
+#: common/models.py:992
msgid "Create initial stock on part creation"
msgstr ""
-#: common/models.py:1002
+#: common/models.py:998
msgid "Internal Prices"
msgstr ""
-#: common/models.py:1003
+#: common/models.py:999
msgid "Enable internal prices for parts"
msgstr ""
-#: common/models.py:1009
+#: common/models.py:1005
msgid "Internal Price as BOM-Price"
msgstr ""
-#: common/models.py:1010
+#: common/models.py:1006
msgid "Use the internal price (if set) in BOM-price calculations"
msgstr ""
-#: common/models.py:1016
+#: common/models.py:1012
msgid "Part Name Display Format"
msgstr ""
-#: common/models.py:1017
+#: common/models.py:1013
msgid "Format to display the part name"
msgstr ""
-#: common/models.py:1024
+#: common/models.py:1020
msgid "Enable Reports"
msgstr ""
-#: common/models.py:1025
+#: common/models.py:1021
msgid "Enable generation of reports"
msgstr ""
-#: common/models.py:1031 templates/stats.html:25
+#: common/models.py:1027 templates/stats.html:25
msgid "Debug Mode"
msgstr "Режим отладки"
-#: common/models.py:1032
+#: common/models.py:1028
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/models.py:1038
+#: common/models.py:1034
msgid "Page Size"
msgstr ""
-#: common/models.py:1039
+#: common/models.py:1035
msgid "Default page size for PDF reports"
msgstr ""
-#: common/models.py:1049
+#: common/models.py:1045
msgid "Test Reports"
msgstr ""
-#: common/models.py:1050
+#: common/models.py:1046
msgid "Enable generation of test reports"
msgstr ""
-#: common/models.py:1056
+#: common/models.py:1052
msgid "Batch Code Template"
msgstr ""
-#: common/models.py:1057
+#: common/models.py:1053
msgid "Template for generating default batch codes for stock items"
msgstr ""
-#: common/models.py:1062
+#: common/models.py:1058
msgid "Stock Expiry"
msgstr ""
-#: common/models.py:1063
+#: common/models.py:1059
msgid "Enable stock expiry functionality"
msgstr ""
-#: common/models.py:1069
+#: common/models.py:1065
msgid "Sell Expired Stock"
msgstr ""
-#: common/models.py:1070
+#: common/models.py:1066
msgid "Allow sale of expired stock"
msgstr ""
-#: common/models.py:1076
+#: common/models.py:1072
msgid "Stock Stale Time"
msgstr ""
-#: common/models.py:1077
+#: common/models.py:1073
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/models.py:1079
+#: common/models.py:1075
msgid "days"
msgstr ""
-#: common/models.py:1084
+#: common/models.py:1080
msgid "Build Expired Stock"
msgstr ""
-#: common/models.py:1085
+#: common/models.py:1081
msgid "Allow building with expired stock"
msgstr ""
-#: common/models.py:1091
+#: common/models.py:1087
msgid "Stock Ownership Control"
msgstr ""
-#: common/models.py:1092
+#: common/models.py:1088
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/models.py:1098
+#: common/models.py:1094
msgid "Build Order Reference Prefix"
msgstr ""
-#: common/models.py:1099
+#: common/models.py:1095
msgid "Prefix value for build order reference"
msgstr ""
-#: common/models.py:1104
+#: common/models.py:1100
msgid "Build Order Reference Regex"
msgstr ""
-#: common/models.py:1105
+#: common/models.py:1101
msgid "Regular expression pattern for matching build order reference"
msgstr ""
-#: common/models.py:1109
+#: common/models.py:1105
msgid "Sales Order Reference Prefix"
msgstr ""
-#: common/models.py:1110
+#: common/models.py:1106
msgid "Prefix value for sales order reference"
msgstr ""
-#: common/models.py:1115
+#: common/models.py:1111
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/models.py:1116
+#: common/models.py:1112
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/models.py:1122
+#: common/models.py:1118
msgid "Purchase Order Reference Prefix"
msgstr ""
-#: common/models.py:1123
+#: common/models.py:1119
msgid "Prefix value for purchase order reference"
msgstr ""
-#: common/models.py:1129
+#: common/models.py:1125
msgid "Enable password forgot"
msgstr ""
-#: common/models.py:1130
+#: common/models.py:1126
msgid "Enable password forgot function on the login pages"
msgstr ""
-#: common/models.py:1136
+#: common/models.py:1132
msgid "Enable registration"
msgstr ""
-#: common/models.py:1137
+#: common/models.py:1133
msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/models.py:1143
+#: common/models.py:1139
msgid "Enable SSO"
msgstr ""
-#: common/models.py:1144
+#: common/models.py:1140
msgid "Enable SSO on the login pages"
msgstr ""
-#: common/models.py:1150
+#: common/models.py:1146
msgid "Email required"
msgstr "Необходимо указать EMail"
-#: common/models.py:1151
+#: common/models.py:1147
msgid "Require user to supply mail on signup"
msgstr ""
-#: common/models.py:1157
+#: common/models.py:1153
msgid "Auto-fill SSO users"
msgstr ""
-#: common/models.py:1158
+#: common/models.py:1154
msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
-#: common/models.py:1164
+#: common/models.py:1160
msgid "Mail twice"
msgstr ""
-#: common/models.py:1165
+#: common/models.py:1161
msgid "On signup ask users twice for their mail"
msgstr ""
-#: common/models.py:1171
+#: common/models.py:1167
msgid "Password twice"
msgstr ""
-#: common/models.py:1172
+#: common/models.py:1168
msgid "On signup ask users twice for their password"
msgstr ""
-#: common/models.py:1178
+#: common/models.py:1174
msgid "Group on signup"
msgstr ""
-#: common/models.py:1179
+#: common/models.py:1175
msgid "Group to which new users are assigned on registration"
msgstr ""
-#: common/models.py:1185
+#: common/models.py:1181
msgid "Enforce MFA"
msgstr ""
-#: common/models.py:1186
+#: common/models.py:1182
msgid "Users must use multifactor security."
msgstr ""
-#: common/models.py:1192
+#: common/models.py:1188
msgid "Check plugins on startup"
msgstr ""
-#: common/models.py:1193
+#: common/models.py:1189
msgid "Check that all plugins are installed on startup - enable in container enviroments"
msgstr ""
-#: common/models.py:1201
+#: common/models.py:1197
msgid "Enable URL integration"
msgstr ""
-#: common/models.py:1202
+#: common/models.py:1198
msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/models.py:1209
+#: common/models.py:1205
msgid "Enable navigation integration"
msgstr ""
-#: common/models.py:1210
+#: common/models.py:1206
msgid "Enable plugins to integrate into navigation"
msgstr ""
-#: common/models.py:1217
+#: common/models.py:1213
msgid "Enable app integration"
msgstr ""
-#: common/models.py:1218
+#: common/models.py:1214
msgid "Enable plugins to add apps"
msgstr ""
-#: common/models.py:1225
+#: common/models.py:1221
msgid "Enable schedule integration"
msgstr ""
-#: common/models.py:1226
+#: common/models.py:1222
msgid "Enable plugins to run scheduled tasks"
msgstr ""
-#: common/models.py:1233
+#: common/models.py:1229
msgid "Enable event integration"
msgstr ""
-#: common/models.py:1234
+#: common/models.py:1230
msgid "Enable plugins to respond to internal events"
msgstr ""
-#: common/models.py:1249 common/models.py:1564
+#: common/models.py:1245 common/models.py:1560
msgid "Settings key (must be unique - case insensitive"
msgstr ""
-#: common/models.py:1280
+#: common/models.py:1276
msgid "Show subscribed parts"
msgstr "Показывать детали, на которые включены уведомления"
-#: common/models.py:1281
+#: common/models.py:1277
msgid "Show subscribed parts on the homepage"
msgstr "Показывать детали, на которые включены уведомления, на главной странице"
-#: common/models.py:1287
+#: common/models.py:1283
msgid "Show subscribed categories"
msgstr "Показывать категории, на которые включены уведомления"
-#: common/models.py:1288
+#: common/models.py:1284
msgid "Show subscribed part categories on the homepage"
msgstr "Показывать категории, на которые включены уведомления, на главной странице"
-#: common/models.py:1294
+#: common/models.py:1290
msgid "Show latest parts"
msgstr "Показывать последние детали"
-#: common/models.py:1295
+#: common/models.py:1291
msgid "Show latest parts on the homepage"
msgstr "Показывать последние детали на главной странице"
-#: common/models.py:1301
+#: common/models.py:1297
msgid "Recent Part Count"
msgstr ""
-#: common/models.py:1302
+#: common/models.py:1298
msgid "Number of recent parts to display on index page"
msgstr ""
-#: common/models.py:1308
+#: common/models.py:1304
msgid "Show unvalidated BOMs"
msgstr "Показывать непроверенные BOMы"
-#: common/models.py:1309
+#: common/models.py:1305
msgid "Show BOMs that await validation on the homepage"
msgstr "Показывать BOMы, ожидающие проверки, на главной странице"
-#: common/models.py:1315
+#: common/models.py:1311
msgid "Show recent stock changes"
msgstr "Показывать изменившиеся складские запасы"
-#: common/models.py:1316
+#: common/models.py:1312
msgid "Show recently changed stock items on the homepage"
msgstr "Показывать единицы хранения с недавно изменившимися складскими запасами на главной странице"
-#: common/models.py:1322
+#: common/models.py:1318
msgid "Recent Stock Count"
msgstr ""
-#: common/models.py:1323
+#: common/models.py:1319
msgid "Number of recent stock items to display on index page"
msgstr ""
-#: common/models.py:1329
+#: common/models.py:1325
msgid "Show low stock"
msgstr "Показывать низкие складские запасы"
-#: common/models.py:1330
+#: common/models.py:1326
msgid "Show low stock items on the homepage"
msgstr "Показывать единицы хранения с низкими складскими запасами на главной странице"
-#: common/models.py:1336
+#: common/models.py:1332
msgid "Show depleted stock"
msgstr "Показывать закончившиеся детали"
-#: common/models.py:1337
+#: common/models.py:1333
msgid "Show depleted stock items on the homepage"
msgstr "Показывать закончившиеся на складе единицы хранения на главной странице"
-#: common/models.py:1343
+#: common/models.py:1339
msgid "Show needed stock"
msgstr "Показывать требуемые детали"
-#: common/models.py:1344
+#: common/models.py:1340
msgid "Show stock items needed for builds on the homepage"
msgstr "Показывать требуемые для сборки единицы хранения на главной странице"
-#: common/models.py:1350
+#: common/models.py:1346
msgid "Show expired stock"
msgstr "Показывать просрочку"
-#: common/models.py:1351
+#: common/models.py:1347
msgid "Show expired stock items on the homepage"
msgstr "Показывать единицы хранения с истёкшим сроком годности на главной странице"
-#: common/models.py:1357
+#: common/models.py:1353
msgid "Show stale stock"
msgstr "Показывать залежалые"
-#: common/models.py:1358
+#: common/models.py:1354
msgid "Show stale stock items on the homepage"
msgstr "Показывать залежалые единицы хранения на главной странице"
-#: common/models.py:1364
+#: common/models.py:1360
msgid "Show pending builds"
msgstr "Показывать незавершённые сборки"
-#: common/models.py:1365
+#: common/models.py:1361
msgid "Show pending builds on the homepage"
msgstr "Показывать незавершённые сборки на главной странице"
-#: common/models.py:1371
+#: common/models.py:1367
msgid "Show overdue builds"
msgstr "Показывать просроченные сборки"
-#: common/models.py:1372
+#: common/models.py:1368
msgid "Show overdue builds on the homepage"
msgstr "Показывать просроченные сборки на главной странице"
-#: common/models.py:1378
+#: common/models.py:1374
msgid "Show outstanding POs"
msgstr ""
-#: common/models.py:1379
+#: common/models.py:1375
msgid "Show outstanding POs on the homepage"
msgstr ""
-#: common/models.py:1385
+#: common/models.py:1381
msgid "Show overdue POs"
msgstr ""
-#: common/models.py:1386
+#: common/models.py:1382
msgid "Show overdue POs on the homepage"
msgstr ""
-#: common/models.py:1392
+#: common/models.py:1388
msgid "Show outstanding SOs"
msgstr ""
-#: common/models.py:1393
+#: common/models.py:1389
msgid "Show outstanding SOs on the homepage"
msgstr ""
-#: common/models.py:1399
+#: common/models.py:1395
msgid "Show overdue SOs"
msgstr ""
-#: common/models.py:1400
+#: common/models.py:1396
msgid "Show overdue SOs on the homepage"
msgstr ""
-#: common/models.py:1405
+#: common/models.py:1401
msgid "Enable label printing"
msgstr ""
-#: common/models.py:1406
+#: common/models.py:1402
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/models.py:1412
+#: common/models.py:1408
msgid "Inline label display"
msgstr ""
-#: common/models.py:1413
+#: common/models.py:1409
msgid "Display PDF labels in the browser, instead of downloading as a file"
msgstr ""
-#: common/models.py:1419
+#: common/models.py:1415
msgid "Inline report display"
msgstr ""
-#: common/models.py:1420
+#: common/models.py:1416
msgid "Display PDF reports in the browser, instead of downloading as a file"
msgstr ""
-#: common/models.py:1426
+#: common/models.py:1422
msgid "Search Parts"
msgstr ""
-#: common/models.py:1427
+#: common/models.py:1423
msgid "Display parts in search preview window"
msgstr ""
-#: common/models.py:1433
+#: common/models.py:1429
msgid "Hide Inactive Parts"
msgstr ""
-#: common/models.py:1434
+#: common/models.py:1430
msgid "Excluded inactive parts from search preview window"
msgstr ""
-#: common/models.py:1440
+#: common/models.py:1436
msgid "Search Categories"
msgstr ""
-#: common/models.py:1441
+#: common/models.py:1437
msgid "Display part categories in search preview window"
msgstr ""
-#: common/models.py:1447
+#: common/models.py:1443
msgid "Search Stock"
msgstr ""
-#: common/models.py:1448
+#: common/models.py:1444
msgid "Display stock items in search preview window"
msgstr ""
-#: common/models.py:1454
+#: common/models.py:1450
msgid "Hide Unavailable Stock Items"
msgstr ""
-#: common/models.py:1455
+#: common/models.py:1451
msgid "Exclude stock items which are not available from the search preview window"
msgstr ""
-#: common/models.py:1461
+#: common/models.py:1457
msgid "Search Locations"
msgstr ""
-#: common/models.py:1462
+#: common/models.py:1458
msgid "Display stock locations in search preview window"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1464
msgid "Search Companies"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1465
msgid "Display companies in search preview window"
msgstr ""
-#: common/models.py:1475
+#: common/models.py:1471
msgid "Search Purchase Orders"
msgstr ""
-#: common/models.py:1476
+#: common/models.py:1472
msgid "Display purchase orders in search preview window"
msgstr ""
-#: common/models.py:1482
+#: common/models.py:1478
msgid "Exclude Inactive Purchase Orders"
msgstr ""
-#: common/models.py:1483
+#: common/models.py:1479
msgid "Exclude inactive purchase orders from search preview window"
msgstr ""
-#: common/models.py:1489
+#: common/models.py:1485
msgid "Search Sales Orders"
msgstr ""
-#: common/models.py:1490
+#: common/models.py:1486
msgid "Display sales orders in search preview window"
msgstr ""
-#: common/models.py:1496
+#: common/models.py:1492
msgid "Exclude Inactive Sales Orders"
msgstr ""
-#: common/models.py:1497
+#: common/models.py:1493
msgid "Exclude inactive sales orders from search preview window"
msgstr ""
-#: common/models.py:1503
+#: common/models.py:1499
msgid "Search Preview Results"
msgstr ""
-#: common/models.py:1504
+#: common/models.py:1500
msgid "Number of results to show in each section of the search preview window"
msgstr ""
-#: common/models.py:1510
+#: common/models.py:1506
msgid "Show Quantity in Forms"
msgstr ""
-#: common/models.py:1511
+#: common/models.py:1507
msgid "Display available part quantity in some forms"
msgstr ""
-#: common/models.py:1517
+#: common/models.py:1513
msgid "Escape Key Closes Forms"
msgstr ""
-#: common/models.py:1518
+#: common/models.py:1514
msgid "Use the escape key to close modal forms"
msgstr ""
-#: common/models.py:1524
+#: common/models.py:1520
msgid "Fixed Navbar"
msgstr ""
-#: common/models.py:1525
+#: common/models.py:1521
msgid "The navbar position is fixed to the top of the screen"
msgstr ""
-#: common/models.py:1531
+#: common/models.py:1527
msgid "Date Format"
msgstr ""
-#: common/models.py:1532
+#: common/models.py:1528
msgid "Preferred format for displaying dates"
msgstr ""
-#: common/models.py:1546 part/templates/part/detail.html:39
+#: common/models.py:1542 part/templates/part/detail.html:39
msgid "Part Scheduling"
msgstr ""
-#: common/models.py:1547
+#: common/models.py:1543
msgid "Display part scheduling information"
msgstr ""
-#: common/models.py:1615 company/forms.py:40
+#: common/models.py:1611 company/forms.py:39
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1622 company/serializers.py:288
-#: company/templates/company/supplier_part.html:263 order/models.py:921
+#: common/models.py:1618 company/serializers.py:285
+#: company/templates/company/supplier_part.html:263 order/models.py:917
#: templates/js/translated/part.js:998 templates/js/translated/part.js:1974
msgid "Price"
msgstr "Цена"
-#: common/models.py:1623
+#: common/models.py:1619
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1783 common/models.py:1920
+#: common/models.py:1779 common/models.py:1916
msgid "Endpoint"
msgstr ""
-#: common/models.py:1784
+#: common/models.py:1780
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1793
+#: common/models.py:1789
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1798 part/models.py:985 plugin/models.py:106
+#: common/models.py:1794 part/models.py:973 plugin/models.py:105
#: templates/js/translated/table_filters.js:34
#: templates/js/translated/table_filters.js:96
#: templates/js/translated/table_filters.js:308
@@ -2442,79 +2442,79 @@ msgstr ""
msgid "Active"
msgstr ""
-#: common/models.py:1799
+#: common/models.py:1795
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1813
+#: common/models.py:1809
msgid "Token"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1810
msgid "Token for access"
msgstr ""
-#: common/models.py:1821
+#: common/models.py:1817
msgid "Secret"
msgstr ""
-#: common/models.py:1822
+#: common/models.py:1818
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1887
+#: common/models.py:1883
msgid "Message ID"
msgstr ""
-#: common/models.py:1888
+#: common/models.py:1884
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1896
+#: common/models.py:1892
msgid "Host"
msgstr ""
-#: common/models.py:1897
+#: common/models.py:1893
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1904
+#: common/models.py:1900
msgid "Header"
msgstr ""
-#: common/models.py:1905
+#: common/models.py:1901
msgid "Header of this message"
msgstr ""
-#: common/models.py:1911
+#: common/models.py:1907
msgid "Body"
msgstr ""
-#: common/models.py:1912
+#: common/models.py:1908
msgid "Body of this message"
msgstr ""
-#: common/models.py:1921
+#: common/models.py:1917
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1926
+#: common/models.py:1922
msgid "Worked on"
msgstr ""
-#: common/models.py:1927
+#: common/models.py:1923
msgid "Was the work on this message finished?"
msgstr ""
#: common/views.py:90 order/templates/order/purchase_order_detail.html:23
-#: order/views.py:119 part/views.py:205
+#: order/views.py:115 part/views.py:194
#: templates/patterns/wizard/upload.html:37
msgid "Upload File"
msgstr "Загрузить файл"
-#: common/views.py:91 order/views.py:120
+#: common/views.py:91 order/views.py:116
#: part/templates/part/import_wizard/ajax_match_fields.html:45
-#: part/views.py:206 templates/patterns/wizard/match_fields.html:51
+#: part/views.py:195 templates/patterns/wizard/match_fields.html:51
msgid "Match Fields"
msgstr ""
@@ -2537,118 +2537,118 @@ msgstr "Детали импортированы"
msgid "Previous Step"
msgstr "Предыдущий шаг"
-#: company/forms.py:21 part/forms.py:43
+#: company/forms.py:20 part/forms.py:41
#: templates/InvenTree/settings/mixins/urls.html:14
msgid "URL"
msgstr "Ссылка"
-#: company/forms.py:22 part/forms.py:44
+#: company/forms.py:21 part/forms.py:42
msgid "Image URL"
msgstr "Ссылка на изображение"
-#: company/models.py:103
+#: company/models.py:97
msgid "Company description"
msgstr "Описание компании"
-#: company/models.py:104
+#: company/models.py:98
msgid "Description of the company"
msgstr "Описание компании"
-#: company/models.py:110 company/templates/company/company_base.html:100
+#: company/models.py:104 company/templates/company/company_base.html:100
#: templates/InvenTree/settings/plugin_settings.html:55
#: templates/js/translated/company.js:349
msgid "Website"
msgstr "Сайт"
-#: company/models.py:111
+#: company/models.py:105
msgid "Company website URL"
msgstr "Сайт компании"
-#: company/models.py:115 company/templates/company/company_base.html:118
+#: company/models.py:109 company/templates/company/company_base.html:118
msgid "Address"
msgstr "Адрес"
-#: company/models.py:116
+#: company/models.py:110
msgid "Company address"
msgstr "Адрес компании"
-#: company/models.py:119
+#: company/models.py:113
msgid "Phone number"
msgstr "Телефон"
-#: company/models.py:120
+#: company/models.py:114
msgid "Contact phone number"
msgstr "Контактный телефон"
-#: company/models.py:123 company/templates/company/company_base.html:132
+#: company/models.py:117 company/templates/company/company_base.html:132
#: templates/InvenTree/settings/user.html:48
msgid "Email"
msgstr "EMail"
-#: company/models.py:123
+#: company/models.py:117
msgid "Contact email address"
msgstr "Контактный EMail"
-#: company/models.py:126 company/templates/company/company_base.html:139
+#: company/models.py:120 company/templates/company/company_base.html:139
msgid "Contact"
msgstr "Контакт"
-#: company/models.py:127
+#: company/models.py:121
msgid "Point of contact"
msgstr "Контактное лицо"
-#: company/models.py:129
+#: company/models.py:123
msgid "Link to external company information"
msgstr "Ссылка на описание компании"
-#: company/models.py:137 part/models.py:877
+#: company/models.py:131 part/models.py:865
msgid "Image"
msgstr "Изображение"
-#: company/models.py:142
+#: company/models.py:136
msgid "is customer"
msgstr "покупатель"
-#: company/models.py:142
+#: company/models.py:136
msgid "Do you sell items to this company?"
msgstr "Вы продаёте детали этой компании?"
-#: company/models.py:144
+#: company/models.py:138
msgid "is supplier"
msgstr "поставщик"
-#: company/models.py:144
+#: company/models.py:138
msgid "Do you purchase items from this company?"
msgstr "Вы закупаете детали у этой компании?"
-#: company/models.py:146
+#: company/models.py:140
msgid "is manufacturer"
msgstr "производитель"
-#: company/models.py:146
+#: company/models.py:140
msgid "Does this company manufacture parts?"
msgstr "Является ли компания производителем деталей?"
-#: company/models.py:150 company/serializers.py:294
-#: company/templates/company/company_base.html:106 part/serializers.py:156
-#: part/serializers.py:188 stock/serializers.py:176
+#: company/models.py:144 company/serializers.py:291
+#: company/templates/company/company_base.html:106 part/serializers.py:151
+#: part/serializers.py:183 stock/serializers.py:168
msgid "Currency"
msgstr "Валюта"
-#: company/models.py:153
+#: company/models.py:147
msgid "Default currency used for this company"
msgstr "Для этой компании используется валюта по умолчанию"
-#: company/models.py:315 company/models.py:546 stock/models.py:616
+#: company/models.py:309 company/models.py:540 stock/models.py:607
#: stock/templates/stock/item_base.html:148 templates/js/translated/bom.js:542
msgid "Base Part"
msgstr "Базовая деталь"
-#: company/models.py:319 company/models.py:550
+#: company/models.py:313 company/models.py:544
msgid "Select part"
msgstr "Выберите деталь"
-#: company/models.py:330 company/templates/company/company_base.html:76
+#: company/models.py:324 company/templates/company/company_base.html:76
#: company/templates/company/manufacturer_part.html:90
#: company/templates/company/supplier_part.html:103
#: stock/templates/stock/item_base.html:370
@@ -2659,146 +2659,146 @@ msgstr "Выберите деталь"
msgid "Manufacturer"
msgstr "Производитель"
-#: company/models.py:331 templates/js/translated/part.js:236
+#: company/models.py:325 templates/js/translated/part.js:236
msgid "Select manufacturer"
msgstr "Выберите производителя"
-#: company/models.py:337 company/templates/company/manufacturer_part.html:101
+#: company/models.py:331 company/templates/company/manufacturer_part.html:101
#: company/templates/company/supplier_part.html:111
#: templates/js/translated/company.js:533
-#: templates/js/translated/company.js:818 templates/js/translated/order.js:1683
+#: templates/js/translated/company.js:818 templates/js/translated/order.js:1789
#: templates/js/translated/part.js:246 templates/js/translated/part.js:956
msgid "MPN"
msgstr ""
-#: company/models.py:338 templates/js/translated/part.js:247
+#: company/models.py:332 templates/js/translated/part.js:247
msgid "Manufacturer Part Number"
msgstr "Код производителя"
-#: company/models.py:344
+#: company/models.py:338
msgid "URL for external manufacturer part link"
msgstr "Ссылка на сайт производителя"
-#: company/models.py:350
+#: company/models.py:344
msgid "Manufacturer part description"
msgstr ""
-#: company/models.py:397 company/models.py:420 company/models.py:569
+#: company/models.py:391 company/models.py:414 company/models.py:563
#: company/templates/company/manufacturer_part.html:7
#: company/templates/company/manufacturer_part.html:24
#: stock/templates/stock/item_base.html:380
msgid "Manufacturer Part"
msgstr "Деталь производителя"
-#: company/models.py:427
+#: company/models.py:421
msgid "Parameter name"
msgstr "Наименование параметра"
-#: company/models.py:433
+#: company/models.py:427
#: report/templates/report/inventree_test_report_base.html:95
-#: stock/models.py:2204 templates/js/translated/company.js:647
+#: stock/models.py:2195 templates/js/translated/company.js:647
#: templates/js/translated/part.js:776 templates/js/translated/stock.js:1304
msgid "Value"
msgstr "Значение"
-#: company/models.py:434
+#: company/models.py:428
msgid "Parameter value"
msgstr "Значение параметра"
-#: company/models.py:440 part/models.py:952 part/models.py:2561
+#: company/models.py:434 part/models.py:940 part/models.py:2549
#: part/templates/part/part_base.html:280
#: templates/InvenTree/settings/settings.html:332
#: templates/js/translated/company.js:653 templates/js/translated/part.js:782
msgid "Units"
msgstr "Ед.изм"
-#: company/models.py:441
+#: company/models.py:435
msgid "Parameter units"
msgstr "Единицы измерения"
-#: company/models.py:513
+#: company/models.py:507
msgid "Linked manufacturer part must reference the same base part"
msgstr ""
-#: company/models.py:556 company/templates/company/company_base.html:81
-#: company/templates/company/supplier_part.html:87 order/models.py:256
+#: company/models.py:550 company/templates/company/company_base.html:81
+#: company/templates/company/supplier_part.html:87 order/models.py:252
#: order/templates/order/order_base.html:112 part/bom.py:237 part/bom.py:265
#: stock/templates/stock/item_base.html:387
#: templates/js/translated/company.js:337
-#: templates/js/translated/company.js:774 templates/js/translated/order.js:1443
+#: templates/js/translated/company.js:774 templates/js/translated/order.js:1549
#: templates/js/translated/part.js:216 templates/js/translated/part.js:924
#: templates/js/translated/table_filters.js:415
msgid "Supplier"
msgstr "Поставщик"
-#: company/models.py:557 templates/js/translated/part.js:217
+#: company/models.py:551 templates/js/translated/part.js:217
msgid "Select supplier"
msgstr "Выберите поставщика"
-#: company/models.py:562 company/templates/company/supplier_part.html:97
-#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1670
+#: company/models.py:556 company/templates/company/supplier_part.html:97
+#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1776
#: templates/js/translated/part.js:227 templates/js/translated/part.js:942
msgid "SKU"
msgstr ""
-#: company/models.py:563 templates/js/translated/part.js:228
+#: company/models.py:557 templates/js/translated/part.js:228
msgid "Supplier stock keeping unit"
msgstr "Код поставщика"
-#: company/models.py:570
+#: company/models.py:564
msgid "Select manufacturer part"
msgstr ""
-#: company/models.py:576
+#: company/models.py:570
msgid "URL for external supplier part link"
msgstr "Ссылка на сайт поставщика"
-#: company/models.py:582
+#: company/models.py:576
msgid "Supplier part description"
msgstr ""
-#: company/models.py:587 company/templates/company/supplier_part.html:125
-#: part/models.py:2800 part/templates/part/upload_bom.html:59
+#: company/models.py:581 company/templates/company/supplier_part.html:125
+#: part/models.py:2788 part/templates/part/upload_bom.html:59
#: report/templates/report/inventree_po_report.html:92
-#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:406
+#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:398
msgid "Note"
msgstr "Заметка"
-#: company/models.py:591 part/models.py:1870
+#: company/models.py:585 part/models.py:1858
msgid "base cost"
msgstr ""
-#: company/models.py:591 part/models.py:1870
+#: company/models.py:585 part/models.py:1858
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:593 company/templates/company/supplier_part.html:118
-#: stock/models.py:640 stock/templates/stock/item_base.html:328
+#: company/models.py:587 company/templates/company/supplier_part.html:118
+#: stock/models.py:631 stock/templates/stock/item_base.html:328
#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1918
msgid "Packaging"
msgstr "Упаковка"
-#: company/models.py:593
+#: company/models.py:587
msgid "Part packaging"
msgstr ""
-#: company/models.py:595 part/models.py:1872
+#: company/models.py:589 part/models.py:1860
msgid "multiple"
msgstr ""
-#: company/models.py:595
+#: company/models.py:589
msgid "Order multiple"
msgstr ""
-#: company/models.py:719
+#: company/models.py:713
msgid "last updated"
msgstr ""
-#: company/serializers.py:71
+#: company/serializers.py:68
msgid "Default currency used for this supplier"
msgstr "Для этого поставщика используется валюта по умолчанию"
-#: company/serializers.py:72
+#: company/serializers.py:69
msgid "Currency Code"
msgstr "Код валюты"
@@ -2809,7 +2809,7 @@ msgid "Company"
msgstr "Компания"
#: company/templates/company/company_base.html:22
-#: templates/js/translated/order.js:416
+#: templates/js/translated/order.js:522
msgid "Create Purchase Order"
msgstr "Создать заказ на закупку"
@@ -2845,11 +2845,11 @@ msgstr "Загрузить новое изображение"
msgid "Download image from URL"
msgstr "Скачать изображение по ссылке"
-#: company/templates/company/company_base.html:86 order/models.py:604
-#: order/templates/order/sales_order_base.html:115 stock/models.py:659
-#: stock/models.py:660 stock/serializers.py:722
+#: company/templates/company/company_base.html:86 order/models.py:600
+#: order/templates/order/sales_order_base.html:116 stock/models.py:650
+#: stock/models.py:651 stock/serializers.py:714
#: stock/templates/stock/item_base.html:280
-#: templates/js/translated/company.js:329 templates/js/translated/order.js:2130
+#: templates/js/translated/company.js:329 templates/js/translated/order.js:2236
#: templates/js/translated/stock.js:2436
#: templates/js/translated/table_filters.js:419
msgid "Customer"
@@ -2935,7 +2935,7 @@ msgstr "Склад поставщика"
#: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197
#: templates/InvenTree/settings/sidebar.html:47
#: templates/js/translated/search.js:190 templates/navbar.html:50
-#: users/models.py:45
+#: users/models.py:43
msgid "Purchase Orders"
msgstr "Заказы на закупку"
@@ -2958,7 +2958,7 @@ msgstr "Новый заказ на закупку"
#: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217
#: templates/InvenTree/settings/sidebar.html:49
#: templates/js/translated/search.js:214 templates/navbar.html:61
-#: users/models.py:46
+#: users/models.py:44
msgid "Sales Orders"
msgstr "Заказы на продажу"
@@ -2997,7 +2997,7 @@ msgstr "Все выбранные детали поставщика будут
msgid "Supplier List"
msgstr "Список поставщиков"
-#: company/templates/company/manufacturer_part.html:15 company/views.py:52
+#: company/templates/company/manufacturer_part.html:15 company/views.py:47
#: part/templates/part/prices.html:170 templates/InvenTree/search.html:178
#: templates/navbar.html:49
msgid "Manufacturers"
@@ -3030,7 +3030,7 @@ msgid "No manufacturer information available"
msgstr ""
#: company/templates/company/manufacturer_part.html:119
-#: company/templates/company/supplier_part.html:15 company/views.py:46
+#: company/templates/company/supplier_part.html:15 company/views.py:41
#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:166
#: templates/InvenTree/search.html:188 templates/navbar.html:48
msgid "Suppliers"
@@ -3046,7 +3046,7 @@ msgstr "Удалить деталь поставщика"
#: company/templates/company/manufacturer_part.html:303
#: part/templates/part/detail.html:363 part/templates/part/detail.html:392
#: templates/js/translated/bom.js:699 templates/js/translated/company.js:426
-#: templates/js/translated/helpers.js:32 users/models.py:222
+#: templates/js/translated/helpers.js:32 users/models.py:220
msgid "Delete"
msgstr "Удалить"
@@ -3098,9 +3098,9 @@ msgid "Assigned Stock Items"
msgstr ""
#: company/templates/company/supplier_part.html:7
-#: company/templates/company/supplier_part.html:24 stock/models.py:624
+#: company/templates/company/supplier_part.html:24 stock/models.py:615
#: stock/templates/stock/item_base.html:396
-#: templates/js/translated/company.js:790 templates/js/translated/order.js:763
+#: templates/js/translated/company.js:790 templates/js/translated/order.js:869
#: templates/js/translated/stock.js:1875
msgid "Supplier Part"
msgstr "Деталь поставщика"
@@ -3217,536 +3217,532 @@ msgstr ""
#: stock/templates/stock/location.html:173
#: stock/templates/stock/location_sidebar.html:7
#: templates/InvenTree/search.html:152 templates/js/translated/search.js:138
-#: templates/js/translated/stock.js:2312 users/models.py:43
+#: templates/js/translated/stock.js:2312 users/models.py:41
msgid "Stock Items"
msgstr "Детали на складе"
-#: company/views.py:47
+#: company/views.py:42
msgid "New Supplier"
msgstr "Новый поставщик"
-#: company/views.py:53
+#: company/views.py:48
msgid "New Manufacturer"
msgstr "Новый производитель"
-#: company/views.py:58 templates/InvenTree/search.html:208
+#: company/views.py:53 templates/InvenTree/search.html:208
#: templates/navbar.html:60
msgid "Customers"
msgstr "Покупатели"
-#: company/views.py:59
+#: company/views.py:54
msgid "New Customer"
msgstr "Новый покупатель"
-#: company/views.py:66 templates/js/translated/search.js:167
+#: company/views.py:61 templates/js/translated/search.js:167
msgid "Companies"
msgstr "Компании"
-#: company/views.py:67
+#: company/views.py:62
msgid "New Company"
msgstr "Новая компания"
-#: company/views.py:126 part/views.py:590
+#: company/views.py:121 part/views.py:579
msgid "Download Image"
msgstr "Скачать изображение"
-#: company/views.py:155 part/views.py:622
+#: company/views.py:150 part/views.py:611
msgid "Image size exceeds maximum allowable size for download"
msgstr ""
-#: company/views.py:162 part/views.py:629
+#: company/views.py:157 part/views.py:618
#, python-brace-format
msgid "Invalid response: {code}"
msgstr ""
-#: company/views.py:171 part/views.py:638
+#: company/views.py:166 part/views.py:627
msgid "Supplied URL is not a valid image file"
msgstr ""
-#: label/api.py:94 report/api.py:201
-msgid "No valid objects provided to template"
-msgstr ""
-
-#: label/models.py:110
+#: label/models.py:105
msgid "Label name"
msgstr ""
-#: label/models.py:117
+#: label/models.py:112
msgid "Label description"
msgstr ""
-#: label/models.py:124
+#: label/models.py:119
msgid "Label"
msgstr ""
-#: label/models.py:125
+#: label/models.py:120
msgid "Label template file"
msgstr ""
-#: label/models.py:131 report/models.py:291
+#: label/models.py:126 report/models.py:286
msgid "Enabled"
msgstr ""
-#: label/models.py:132
+#: label/models.py:127
msgid "Label template is enabled"
msgstr ""
-#: label/models.py:137
+#: label/models.py:132
msgid "Width [mm]"
msgstr "Ширина [мм]"
-#: label/models.py:138
+#: label/models.py:133
msgid "Label width, specified in mm"
msgstr ""
-#: label/models.py:144
+#: label/models.py:139
msgid "Height [mm]"
msgstr "Высота [мм]"
-#: label/models.py:145
+#: label/models.py:140
msgid "Label height, specified in mm"
msgstr ""
-#: label/models.py:151 report/models.py:284
+#: label/models.py:146 report/models.py:279
msgid "Filename Pattern"
msgstr ""
-#: label/models.py:152
+#: label/models.py:147
msgid "Pattern for generating label filenames"
msgstr ""
-#: label/models.py:255
+#: label/models.py:250
msgid "Query filters (comma-separated list of key=value pairs),"
msgstr ""
-#: label/models.py:256 label/models.py:316 label/models.py:363
-#: report/models.py:315 report/models.py:452 report/models.py:491
+#: label/models.py:251 label/models.py:295 label/models.py:327
+#: report/models.py:310 report/models.py:447 report/models.py:486
msgid "Filters"
msgstr "Фильтры"
-#: label/models.py:315
+#: label/models.py:294
msgid "Query filters (comma-separated list of key=value pairs"
msgstr ""
-#: label/models.py:362
+#: label/models.py:326
msgid "Part query filters (comma-separated value of key=value pairs)"
msgstr ""
-#: order/models.py:134
+#: order/models.py:130
msgid "Order description"
msgstr ""
-#: order/models.py:136
+#: order/models.py:132
msgid "Link to external page"
msgstr ""
-#: order/models.py:144
+#: order/models.py:140
msgid "Created By"
msgstr ""
-#: order/models.py:151
+#: order/models.py:147
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:156
+#: order/models.py:152
msgid "Order notes"
msgstr ""
-#: order/models.py:242 order/models.py:594
+#: order/models.py:238 order/models.py:590
msgid "Order reference"
msgstr ""
-#: order/models.py:247 order/models.py:609
+#: order/models.py:243 order/models.py:605
msgid "Purchase order status"
msgstr ""
-#: order/models.py:257
+#: order/models.py:253
msgid "Company from which the items are being ordered"
msgstr "Компания, в которой детали заказываются"
-#: order/models.py:260 order/templates/order/order_base.html:124
-#: templates/js/translated/order.js:1452
+#: order/models.py:256 order/templates/order/order_base.html:124
+#: templates/js/translated/order.js:1558
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:260
+#: order/models.py:256
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:267
+#: order/models.py:263
msgid "received by"
msgstr ""
-#: order/models.py:272
+#: order/models.py:268
msgid "Issue Date"
msgstr ""
-#: order/models.py:273
+#: order/models.py:269
msgid "Date order was issued"
msgstr ""
-#: order/models.py:278
+#: order/models.py:274
msgid "Target Delivery Date"
msgstr ""
-#: order/models.py:279
+#: order/models.py:275
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:285
+#: order/models.py:281
msgid "Date order was completed"
msgstr ""
-#: order/models.py:314
+#: order/models.py:310
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:460
+#: order/models.py:456
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:605
+#: order/models.py:601
msgid "Company to which the items are being sold"
msgstr "Компания, которой детали продаются"
-#: order/models.py:611
+#: order/models.py:607
msgid "Customer Reference "
msgstr ""
-#: order/models.py:611
+#: order/models.py:607
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:616
+#: order/models.py:612
msgid "Target date for order completion. Order will be overdue after this date."
msgstr ""
-#: order/models.py:619 order/models.py:1174
-#: templates/js/translated/order.js:2177 templates/js/translated/order.js:2328
+#: order/models.py:615 order/models.py:1170
+#: templates/js/translated/order.js:2283 templates/js/translated/order.js:2434
msgid "Shipment Date"
msgstr ""
-#: order/models.py:626
+#: order/models.py:622
msgid "shipped by"
msgstr ""
-#: order/models.py:692
+#: order/models.py:688
msgid "Order cannot be completed as no parts have been assigned"
msgstr ""
-#: order/models.py:696
+#: order/models.py:692
msgid "Only a pending order can be marked as complete"
msgstr ""
-#: order/models.py:699
+#: order/models.py:695
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:702
+#: order/models.py:698
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:882
+#: order/models.py:878
msgid "Item quantity"
msgstr ""
-#: order/models.py:888
+#: order/models.py:884
msgid "Line item reference"
msgstr ""
-#: order/models.py:890
+#: order/models.py:886
msgid "Line item notes"
msgstr ""
-#: order/models.py:895
+#: order/models.py:891
msgid "Target shipping date for this line item"
msgstr ""
-#: order/models.py:913
+#: order/models.py:909
msgid "Context"
msgstr ""
-#: order/models.py:914
+#: order/models.py:910
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:922
+#: order/models.py:918
msgid "Unit price"
msgstr ""
-#: order/models.py:955
+#: order/models.py:951
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:962
+#: order/models.py:958
msgid "deleted"
msgstr ""
-#: order/models.py:968 order/models.py:1050 order/models.py:1072
-#: order/models.py:1168 order/models.py:1268
-#: templates/js/translated/order.js:2719
+#: order/models.py:964 order/models.py:1046 order/models.py:1068
+#: order/models.py:1164 order/models.py:1273
+#: templates/js/translated/order.js:2874
msgid "Order"
msgstr ""
-#: order/models.py:969 order/models.py:1050
+#: order/models.py:965 order/models.py:1046
#: order/templates/order/order_base.html:9
#: order/templates/order/order_base.html:18
#: report/templates/report/inventree_po_report.html:76
#: stock/templates/stock/item_base.html:342
-#: templates/js/translated/order.js:764 templates/js/translated/order.js:1421
+#: templates/js/translated/order.js:870 templates/js/translated/order.js:1527
#: templates/js/translated/part.js:899 templates/js/translated/stock.js:1852
#: templates/js/translated/stock.js:2417
msgid "Purchase Order"
msgstr "Заказ на закупку"
-#: order/models.py:988
+#: order/models.py:984
msgid "Supplier part"
msgstr ""
-#: order/models.py:995 order/templates/order/order_base.html:169
-#: templates/js/translated/order.js:1197 templates/js/translated/order.js:1785
+#: order/models.py:991 order/templates/order/order_base.html:169
+#: templates/js/translated/order.js:1303 templates/js/translated/order.js:1891
#: templates/js/translated/part.js:993 templates/js/translated/part.js:1020
#: templates/js/translated/table_filters.js:330
msgid "Received"
msgstr ""
-#: order/models.py:996
+#: order/models.py:992
msgid "Number of items received"
msgstr ""
-#: order/models.py:1003 part/templates/part/prices.html:179 stock/models.py:754
-#: stock/serializers.py:167 stock/templates/stock/item_base.html:349
+#: order/models.py:999 part/templates/part/prices.html:179 stock/models.py:745
+#: stock/serializers.py:159 stock/templates/stock/item_base.html:349
#: templates/js/translated/stock.js:1906
msgid "Purchase Price"
msgstr "Закупочная цена"
-#: order/models.py:1004
+#: order/models.py:1000
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:1012
+#: order/models.py:1008
msgid "Where does the Purchaser want this item to be stored?"
msgstr ""
-#: order/models.py:1082 part/templates/part/part_pricing.html:112
+#: order/models.py:1078 part/templates/part/part_pricing.html:112
#: part/templates/part/prices.html:119 part/templates/part/prices.html:288
msgid "Sale Price"
msgstr "Цена продажи"
-#: order/models.py:1083
+#: order/models.py:1079
msgid "Unit sale price"
msgstr ""
-#: order/models.py:1088
+#: order/models.py:1084
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:1175
+#: order/models.py:1171
msgid "Date of shipment"
msgstr ""
-#: order/models.py:1182
+#: order/models.py:1178
msgid "Checked By"
msgstr ""
-#: order/models.py:1183
+#: order/models.py:1179
msgid "User who checked this shipment"
msgstr ""
-#: order/models.py:1191
+#: order/models.py:1187
msgid "Shipment number"
msgstr ""
-#: order/models.py:1198
+#: order/models.py:1194
msgid "Shipment notes"
msgstr ""
-#: order/models.py:1205
+#: order/models.py:1201
msgid "Tracking Number"
msgstr ""
-#: order/models.py:1206
+#: order/models.py:1202
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:1216
+#: order/models.py:1213
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:1219
+#: order/models.py:1216
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:1306 order/models.py:1308
+#: order/models.py:1311 order/models.py:1313
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:1312
+#: order/models.py:1317
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:1314
+#: order/models.py:1319
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:1317
+#: order/models.py:1322
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:1321
+#: order/models.py:1326
msgid "StockItem is over-allocated"
msgstr ""
-#: order/models.py:1327 order/serializers.py:1002
+#: order/models.py:1332 order/serializers.py:1005
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:1330
+#: order/models.py:1335
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:1331
+#: order/models.py:1336
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:1339
+#: order/models.py:1344
msgid "Line"
msgstr ""
-#: order/models.py:1347 order/serializers.py:1112 order/serializers.py:1240
+#: order/models.py:1352 order/serializers.py:1115 order/serializers.py:1243
#: templates/js/translated/model_renderers.js:301
msgid "Shipment"
msgstr ""
-#: order/models.py:1348
+#: order/models.py:1353
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:1360 templates/InvenTree/notifications/notifications.html:70
+#: order/models.py:1365 templates/InvenTree/notifications/notifications.html:70
msgid "Item"
msgstr ""
-#: order/models.py:1361
+#: order/models.py:1366
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:1364
+#: order/models.py:1369
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/serializers.py:74
+#: order/serializers.py:69
msgid "Price currency"
msgstr ""
-#: order/serializers.py:203
+#: order/serializers.py:198
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:301
+#: order/serializers.py:296
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:325
+#: order/serializers.py:320
msgid "Purchase price currency"
msgstr "Курс покупки валюты"
-#: order/serializers.py:339
+#: order/serializers.py:334
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:344
+#: order/serializers.py:339
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:350
+#: order/serializers.py:345
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:351
+#: order/serializers.py:346
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:411 order/serializers.py:1077
+#: order/serializers.py:406 order/serializers.py:1080
msgid "Line Item"
msgstr ""
-#: order/serializers.py:417
+#: order/serializers.py:412
msgid "Line item does not match purchase order"
msgstr ""
-#: order/serializers.py:427 order/serializers.py:532
+#: order/serializers.py:422 order/serializers.py:527
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:446 templates/js/translated/order.js:1055
+#: order/serializers.py:441 templates/js/translated/order.js:1161
msgid "Enter batch code for incoming stock items"
msgstr "Введите код партии для поступающих единиц хранения"
-#: order/serializers.py:454 templates/js/translated/order.js:1066
+#: order/serializers.py:449 templates/js/translated/order.js:1172
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:467
+#: order/serializers.py:462
msgid "Barcode Hash"
msgstr ""
-#: order/serializers.py:468
+#: order/serializers.py:463
msgid "Unique identifier field"
msgstr ""
-#: order/serializers.py:485
+#: order/serializers.py:480
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:504
+#: order/serializers.py:499
msgid "An integer quantity must be provided for trackable parts"
msgstr "Для отслеживаемых деталей должно быть указано целочисленное количество"
-#: order/serializers.py:544
+#: order/serializers.py:539
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:561
+#: order/serializers.py:556
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:572
+#: order/serializers.py:567
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:847
+#: order/serializers.py:842
msgid "Sale price currency"
msgstr "Курс продажи валюты"
-#: order/serializers.py:917
+#: order/serializers.py:913
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:967 order/serializers.py:1089
+#: order/serializers.py:970 order/serializers.py:1092
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:989
+#: order/serializers.py:992
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1102
+#: order/serializers.py:1105
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1126 order/serializers.py:1251
+#: order/serializers.py:1129 order/serializers.py:1254
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1129 order/serializers.py:1254
+#: order/serializers.py:1132 order/serializers.py:1257
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1181
+#: order/serializers.py:1184
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1191
+#: order/serializers.py:1194
msgid "The following serial numbers are already allocated"
msgstr ""
@@ -3770,7 +3766,7 @@ msgid "Edit order"
msgstr ""
#: order/templates/order/order_base.html:47
-#: order/templates/order/sales_order_base.html:60
+#: order/templates/order/sales_order_base.html:61
msgid "Cancel order"
msgstr "Отменить заказ"
@@ -3792,22 +3788,22 @@ msgid "Mark order as complete"
msgstr ""
#: order/templates/order/order_base.html:62
-#: order/templates/order/sales_order_base.html:67
+#: order/templates/order/sales_order_base.html:68
msgid "Complete Order"
msgstr ""
#: order/templates/order/order_base.html:84
-#: order/templates/order/sales_order_base.html:79
+#: order/templates/order/sales_order_base.html:80
msgid "Order Reference"
msgstr ""
#: order/templates/order/order_base.html:89
-#: order/templates/order/sales_order_base.html:84
+#: order/templates/order/sales_order_base.html:85
msgid "Order Description"
msgstr ""
#: order/templates/order/order_base.html:94
-#: order/templates/order/sales_order_base.html:89
+#: order/templates/order/sales_order_base.html:90
msgid "Order Status"
msgstr ""
@@ -3816,13 +3812,13 @@ msgid "No suppplier information available"
msgstr ""
#: order/templates/order/order_base.html:130
-#: order/templates/order/sales_order_base.html:128
+#: order/templates/order/sales_order_base.html:129
msgid "Completed Line Items"
msgstr ""
#: order/templates/order/order_base.html:136
-#: order/templates/order/sales_order_base.html:134
-#: order/templates/order/sales_order_base.html:144
+#: order/templates/order/sales_order_base.html:135
+#: order/templates/order/sales_order_base.html:145
msgid "Incomplete"
msgstr ""
@@ -3832,7 +3828,7 @@ msgid "Issued"
msgstr ""
#: order/templates/order/order_base.html:183
-#: order/templates/order/sales_order_base.html:189
+#: order/templates/order/sales_order_base.html:190
msgid "Total cost"
msgstr ""
@@ -3868,8 +3864,8 @@ msgstr "Выберите деталь поставщика"
#: part/templates/part/import_wizard/match_references.html:49
#: templates/js/translated/bom.js:77 templates/js/translated/build.js:427
#: templates/js/translated/build.js:579 templates/js/translated/build.js:1989
-#: templates/js/translated/order.js:712 templates/js/translated/order.js:1144
-#: templates/js/translated/order.js:2387 templates/js/translated/stock.js:570
+#: templates/js/translated/order.js:818 templates/js/translated/order.js:1250
+#: templates/js/translated/order.js:2493 templates/js/translated/stock.js:570
#: templates/js/translated/stock.js:738
#: templates/patterns/wizard/match_fields.html:70
msgid "Remove row"
@@ -3920,7 +3916,7 @@ msgstr ""
#: order/templates/order/purchase_order_detail.html:53
#: order/templates/order/sales_order_detail.html:45
-#: order/templates/order/sales_order_detail.html:273
+#: order/templates/order/sales_order_detail.html:274
msgid "Add Extra Line"
msgstr ""
@@ -3950,27 +3946,32 @@ msgstr ""
msgid "Print packing list"
msgstr ""
-#: order/templates/order/sales_order_base.html:66
-#: order/templates/order/sales_order_base.html:239
+#: order/templates/order/sales_order_base.html:60
+#: templates/js/translated/order.js:211
+msgid "Complete Shipments"
+msgstr ""
+
+#: order/templates/order/sales_order_base.html:67
+#: order/templates/order/sales_order_base.html:250
msgid "Complete Sales Order"
msgstr ""
-#: order/templates/order/sales_order_base.html:102
+#: order/templates/order/sales_order_base.html:103
msgid "This Sales Order has not been fully allocated"
msgstr ""
-#: order/templates/order/sales_order_base.html:122
-#: templates/js/translated/order.js:2143
+#: order/templates/order/sales_order_base.html:123
+#: templates/js/translated/order.js:2249
msgid "Customer Reference"
msgstr ""
-#: order/templates/order/sales_order_base.html:140
+#: order/templates/order/sales_order_base.html:141
#: order/templates/order/sales_order_detail.html:100
#: order/templates/order/so_sidebar.html:11
msgid "Completed Shipments"
msgstr ""
-#: order/templates/order/sales_order_base.html:221
+#: order/templates/order/sales_order_base.html:222
msgid "Edit Sales Order"
msgstr ""
@@ -3992,73 +3993,73 @@ msgstr "Действия"
msgid "New Shipment"
msgstr ""
-#: order/views.py:121
+#: order/views.py:117
msgid "Match Supplier Parts"
msgstr ""
-#: order/views.py:394
+#: order/views.py:390
msgid "Sales order not found"
msgstr "Заказ на продажу не найден"
-#: order/views.py:400
+#: order/views.py:396
msgid "Price not found"
msgstr "Цена не найдена"
-#: order/views.py:403
+#: order/views.py:399
#, python-brace-format
msgid "Updated {part} unit-price to {price}"
msgstr ""
-#: order/views.py:408
+#: order/views.py:404
#, python-brace-format
msgid "Updated {part} unit-price to {price} and quantity to {qty}"
msgstr ""
-#: part/api.py:516
+#: part/api.py:504
msgid "Incoming Purchase Order"
msgstr ""
-#: part/api.py:536
+#: part/api.py:524
msgid "Outgoing Sales Order"
msgstr ""
-#: part/api.py:554
+#: part/api.py:542
msgid "Stock produced by Build Order"
msgstr ""
-#: part/api.py:586
+#: part/api.py:574
msgid "Stock required for Build Order"
msgstr ""
-#: part/api.py:677
+#: part/api.py:665
msgid "Valid"
msgstr ""
-#: part/api.py:678
+#: part/api.py:666
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/api.py:683
+#: part/api.py:671
msgid "This option must be selected"
msgstr ""
-#: part/api.py:1055
+#: part/api.py:1043
msgid "Must be greater than zero"
msgstr ""
-#: part/api.py:1059
+#: part/api.py:1047
msgid "Must be a valid quantity"
msgstr ""
-#: part/api.py:1074
+#: part/api.py:1062
msgid "Specify location for initial part stock"
msgstr ""
-#: part/api.py:1105 part/api.py:1109 part/api.py:1124 part/api.py:1128
+#: part/api.py:1093 part/api.py:1097 part/api.py:1112 part/api.py:1116
msgid "This field is required"
msgstr ""
-#: part/bom.py:125 part/models.py:111 part/models.py:886
+#: part/bom.py:125 part/models.py:99 part/models.py:874
#: part/templates/part/category.html:108 part/templates/part/part_base.html:330
msgid "Default Location"
msgstr "Место хранения по умолчанию"
@@ -4078,115 +4079,115 @@ msgstr "Доступный запас"
msgid "On Order"
msgstr ""
-#: part/forms.py:81
+#: part/forms.py:79
msgid "Select part category"
msgstr "Выберите категорию"
-#: part/forms.py:100
+#: part/forms.py:98
msgid "Add parameter template to same level categories"
msgstr ""
-#: part/forms.py:104
+#: part/forms.py:102
msgid "Add parameter template to all categories"
msgstr ""
-#: part/forms.py:124
+#: part/forms.py:122
msgid "Input quantity for price calculation"
msgstr ""
-#: part/models.py:112
+#: part/models.py:100
msgid "Default location for parts in this category"
msgstr "Место хранения по умолчанию для деталей этой категории"
-#: part/models.py:115
+#: part/models.py:103
msgid "Default keywords"
msgstr "Ключевые слова по умолчанию"
-#: part/models.py:115
+#: part/models.py:103
msgid "Default keywords for parts in this category"
msgstr "Ключевые слова по умолчанию для деталей этой категории"
-#: part/models.py:125 part/models.py:2637 part/templates/part/category.html:15
+#: part/models.py:113 part/models.py:2625 part/templates/part/category.html:15
#: part/templates/part/part_app_base.html:10
msgid "Part Category"
msgstr "Категория детали"
-#: part/models.py:126 part/templates/part/category.html:128
+#: part/models.py:114 part/templates/part/category.html:128
#: templates/InvenTree/search.html:95 templates/js/translated/search.js:113
-#: users/models.py:40
+#: users/models.py:38
msgid "Part Categories"
msgstr ""
-#: part/models.py:367 part/templates/part/cat_link.html:3
+#: part/models.py:355 part/templates/part/cat_link.html:3
#: part/templates/part/category.html:17 part/templates/part/category.html:133
#: part/templates/part/category.html:153
#: part/templates/part/category_sidebar.html:9
#: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82
#: templates/InvenTree/settings/sidebar.html:39
#: templates/js/translated/part.js:1768 templates/js/translated/search.js:99
-#: templates/navbar.html:24 users/models.py:41
+#: templates/navbar.html:24 users/models.py:39
msgid "Parts"
msgstr "Детали"
-#: part/models.py:459
+#: part/models.py:447
msgid "Invalid choice for parent part"
msgstr ""
-#: part/models.py:534 part/models.py:546
+#: part/models.py:522 part/models.py:534
#, python-brace-format
msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)"
msgstr ""
-#: part/models.py:676
+#: part/models.py:664
msgid "Next available serial numbers are"
msgstr ""
-#: part/models.py:680
+#: part/models.py:668
msgid "Next available serial number is"
msgstr ""
-#: part/models.py:685
+#: part/models.py:673
msgid "Most recent serial number is"
msgstr ""
-#: part/models.py:781
+#: part/models.py:769
msgid "Duplicate IPN not allowed in part settings"
msgstr ""
-#: part/models.py:810 part/models.py:2690
+#: part/models.py:798 part/models.py:2678
msgid "Part name"
msgstr "Наименование детали"
-#: part/models.py:817
+#: part/models.py:805
msgid "Is Template"
msgstr "Шаблон"
-#: part/models.py:818
+#: part/models.py:806
msgid "Is this part a template part?"
msgstr "Эта деталь является шаблоном для других деталей?"
-#: part/models.py:828
+#: part/models.py:816
msgid "Is this part a variant of another part?"
msgstr "Эта деталь является разновидностью другой детали?"
-#: part/models.py:829
+#: part/models.py:817
msgid "Variant Of"
msgstr "Разновидность"
-#: part/models.py:835
+#: part/models.py:823
msgid "Part description"
msgstr "Описание детали"
-#: part/models.py:840 part/templates/part/category.html:86
+#: part/models.py:828 part/templates/part/category.html:86
#: part/templates/part/part_base.html:294
msgid "Keywords"
msgstr "Ключевые слова"
-#: part/models.py:841
+#: part/models.py:829
msgid "Part keywords to improve visibility in search results"
msgstr "Ключевые слова для улучшения видимости в результатах поиска"
-#: part/models.py:848 part/models.py:2387 part/models.py:2636
+#: part/models.py:836 part/models.py:2375 part/models.py:2624
#: part/templates/part/part_base.html:257
#: part/templates/part/set_category.html:15
#: templates/InvenTree/notifications/notifications.html:65
@@ -4195,432 +4196,432 @@ msgstr "Ключевые слова для улучшения видимости
msgid "Category"
msgstr "Категория"
-#: part/models.py:849
+#: part/models.py:837
msgid "Part category"
msgstr "Категория"
-#: part/models.py:854 part/templates/part/part_base.html:266
+#: part/models.py:842 part/templates/part/part_base.html:266
#: templates/js/translated/part.js:666 templates/js/translated/part.js:1322
#: templates/js/translated/stock.js:1669
msgid "IPN"
msgstr ""
-#: part/models.py:855
+#: part/models.py:843
msgid "Internal Part Number"
msgstr "Внутренний код детали"
-#: part/models.py:861
+#: part/models.py:849
msgid "Part revision or version number"
msgstr "Версия детали"
-#: part/models.py:862 part/templates/part/part_base.html:273
-#: report/models.py:193 templates/js/translated/part.js:670
+#: part/models.py:850 part/templates/part/part_base.html:273
+#: report/models.py:188 templates/js/translated/part.js:670
msgid "Revision"
msgstr "Версия"
-#: part/models.py:884
+#: part/models.py:872
msgid "Where is this item normally stored?"
msgstr "Где обычно хранится эта деталь?"
-#: part/models.py:931 part/templates/part/part_base.html:339
+#: part/models.py:919 part/templates/part/part_base.html:339
msgid "Default Supplier"
msgstr ""
-#: part/models.py:932
+#: part/models.py:920
msgid "Default supplier part"
msgstr ""
-#: part/models.py:939
+#: part/models.py:927
msgid "Default Expiry"
msgstr ""
-#: part/models.py:940
+#: part/models.py:928
msgid "Expiry time (in days) for stock items of this part"
msgstr ""
-#: part/models.py:945 part/templates/part/part_base.html:200
+#: part/models.py:933 part/templates/part/part_base.html:200
msgid "Minimum Stock"
msgstr "Минимальный запас"
-#: part/models.py:946
+#: part/models.py:934
msgid "Minimum allowed stock level"
msgstr "Минимально допустимый складской запас"
-#: part/models.py:953
+#: part/models.py:941
msgid "Stock keeping units for this part"
msgstr ""
-#: part/models.py:959
+#: part/models.py:947
msgid "Can this part be built from other parts?"
msgstr "Может ли эта деталь быть создана из других деталей?"
-#: part/models.py:965
+#: part/models.py:953
msgid "Can this part be used to build other parts?"
msgstr "Может ли эта деталь использоваться для создания других деталей?"
-#: part/models.py:971
+#: part/models.py:959
msgid "Does this part have tracking for unique items?"
msgstr "Является ли каждый экземпляр этой детали уникальным, обладающим серийным номером?"
-#: part/models.py:976
+#: part/models.py:964
msgid "Can this part be purchased from external suppliers?"
msgstr "Может ли эта деталь быть закуплена у внешних поставщиков?"
-#: part/models.py:981
+#: part/models.py:969
msgid "Can this part be sold to customers?"
msgstr "Может ли эта деталь быть продана покупателям?"
-#: part/models.py:986
+#: part/models.py:974
msgid "Is this part active?"
msgstr "Эта деталь актуальна?"
-#: part/models.py:991
+#: part/models.py:979
msgid "Is this a virtual part, such as a software product or license?"
msgstr "Эта деталь виртуальная, как программный продукт или лицензия?"
-#: part/models.py:996
+#: part/models.py:984
msgid "Part notes - supports Markdown formatting"
msgstr "Заметки о детали (поддерживается разметка Markdown)"
-#: part/models.py:999
+#: part/models.py:987
msgid "BOM checksum"
msgstr ""
-#: part/models.py:999
+#: part/models.py:987
msgid "Stored BOM checksum"
msgstr ""
-#: part/models.py:1002
+#: part/models.py:990
msgid "BOM checked by"
msgstr ""
-#: part/models.py:1004
+#: part/models.py:992
msgid "BOM checked date"
msgstr ""
-#: part/models.py:1008
+#: part/models.py:996
msgid "Creation User"
msgstr ""
-#: part/models.py:1872
+#: part/models.py:1860
msgid "Sell multiple"
msgstr ""
-#: part/models.py:2437
+#: part/models.py:2425
msgid "Test templates can only be created for trackable parts"
msgstr ""
-#: part/models.py:2454
+#: part/models.py:2442
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2474 templates/js/translated/part.js:1819
+#: part/models.py:2462 templates/js/translated/part.js:1819
#: templates/js/translated/stock.js:1284
msgid "Test Name"
msgstr ""
-#: part/models.py:2475
+#: part/models.py:2463
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:2480
+#: part/models.py:2468
msgid "Test Description"
msgstr ""
-#: part/models.py:2481
+#: part/models.py:2469
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2486 templates/js/translated/part.js:1828
+#: part/models.py:2474 templates/js/translated/part.js:1828
#: templates/js/translated/table_filters.js:294
msgid "Required"
msgstr ""
-#: part/models.py:2487
+#: part/models.py:2475
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2492 templates/js/translated/part.js:1836
+#: part/models.py:2480 templates/js/translated/part.js:1836
msgid "Requires Value"
msgstr ""
-#: part/models.py:2493
+#: part/models.py:2481
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2498 templates/js/translated/part.js:1843
+#: part/models.py:2486 templates/js/translated/part.js:1843
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:2499
+#: part/models.py:2487
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:2510
+#: part/models.py:2498
#, python-brace-format
msgid "Illegal character in template name ({c})"
msgstr ""
-#: part/models.py:2546
+#: part/models.py:2534
msgid "Parameter template name must be unique"
msgstr ""
-#: part/models.py:2554
+#: part/models.py:2542
msgid "Parameter Name"
msgstr ""
-#: part/models.py:2561
+#: part/models.py:2549
msgid "Parameter Units"
msgstr ""
-#: part/models.py:2591
+#: part/models.py:2579
msgid "Parent Part"
msgstr "Родительская деталь"
-#: part/models.py:2593 part/models.py:2642 part/models.py:2643
+#: part/models.py:2581 part/models.py:2630 part/models.py:2631
#: templates/InvenTree/settings/settings.html:226
msgid "Parameter Template"
msgstr "Шаблон параметра"
-#: part/models.py:2595
+#: part/models.py:2583
msgid "Data"
msgstr ""
-#: part/models.py:2595
+#: part/models.py:2583
msgid "Parameter Value"
msgstr ""
-#: part/models.py:2647 templates/InvenTree/settings/settings.html:235
+#: part/models.py:2635 templates/InvenTree/settings/settings.html:235
msgid "Default Value"
msgstr ""
-#: part/models.py:2648
+#: part/models.py:2636
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:2682
+#: part/models.py:2670
msgid "Part ID or part name"
msgstr "Артикул или наименование детали"
-#: part/models.py:2685 templates/js/translated/model_renderers.js:200
+#: part/models.py:2673 templates/js/translated/model_renderers.js:200
msgid "Part ID"
msgstr "Артикул"
-#: part/models.py:2686
+#: part/models.py:2674
msgid "Unique part ID value"
msgstr ""
-#: part/models.py:2689
+#: part/models.py:2677
msgid "Part Name"
msgstr "Наименование детали"
-#: part/models.py:2693
+#: part/models.py:2681
msgid "Part IPN"
msgstr "IPN"
-#: part/models.py:2694
+#: part/models.py:2682
msgid "Part IPN value"
msgstr "Значение IPN"
-#: part/models.py:2697
+#: part/models.py:2685
msgid "Level"
msgstr ""
-#: part/models.py:2698
+#: part/models.py:2686
msgid "BOM level"
msgstr ""
-#: part/models.py:2773
+#: part/models.py:2761
msgid "Select parent part"
msgstr "Выберите родительскую деталь"
-#: part/models.py:2781
+#: part/models.py:2769
msgid "Sub part"
msgstr ""
-#: part/models.py:2782
+#: part/models.py:2770
msgid "Select part to be used in BOM"
msgstr "Выбрать деталь для использования в BOM"
-#: part/models.py:2788
+#: part/models.py:2776
msgid "BOM quantity for this BOM item"
msgstr ""
-#: part/models.py:2790 part/templates/part/upload_bom.html:58
+#: part/models.py:2778 part/templates/part/upload_bom.html:58
#: templates/js/translated/bom.js:898 templates/js/translated/bom.js:992
#: templates/js/translated/table_filters.js:92
msgid "Optional"
msgstr ""
-#: part/models.py:2790
+#: part/models.py:2778
msgid "This BOM item is optional"
msgstr ""
-#: part/models.py:2793 part/templates/part/upload_bom.html:55
+#: part/models.py:2781 part/templates/part/upload_bom.html:55
msgid "Overage"
msgstr ""
-#: part/models.py:2794
+#: part/models.py:2782
msgid "Estimated build wastage quantity (absolute or percentage)"
msgstr ""
-#: part/models.py:2797
+#: part/models.py:2785
msgid "BOM item reference"
msgstr ""
-#: part/models.py:2800
+#: part/models.py:2788
msgid "BOM item notes"
msgstr ""
-#: part/models.py:2802
+#: part/models.py:2790
msgid "Checksum"
msgstr ""
-#: part/models.py:2802
+#: part/models.py:2790
msgid "BOM line checksum"
msgstr ""
-#: part/models.py:2806 part/templates/part/upload_bom.html:57
+#: part/models.py:2794 part/templates/part/upload_bom.html:57
#: templates/js/translated/bom.js:1009
#: templates/js/translated/table_filters.js:68
#: templates/js/translated/table_filters.js:88
msgid "Inherited"
msgstr ""
-#: part/models.py:2807
+#: part/models.py:2795
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr ""
-#: part/models.py:2812 part/templates/part/upload_bom.html:56
+#: part/models.py:2800 part/templates/part/upload_bom.html:56
#: templates/js/translated/bom.js:1001
msgid "Allow Variants"
msgstr "Разрешить разновидности"
-#: part/models.py:2813
+#: part/models.py:2801
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:2898 stock/models.py:495
+#: part/models.py:2886 stock/models.py:486
msgid "Quantity must be integer value for trackable parts"
msgstr "Для отслеживаемых деталей количество должно быть целым числом"
-#: part/models.py:2907 part/models.py:2909
+#: part/models.py:2895 part/models.py:2897
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:3021
+#: part/models.py:3009
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:3043
+#: part/models.py:3031
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:3055
+#: part/models.py:3043
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:3063
+#: part/models.py:3051
msgid "Substitute part"
msgstr ""
-#: part/models.py:3074
+#: part/models.py:3062
msgid "Part 1"
msgstr "Часть 1"
-#: part/models.py:3078
+#: part/models.py:3066
msgid "Part 2"
msgstr "Часть 2"
-#: part/models.py:3078
+#: part/models.py:3066
msgid "Select Related Part"
msgstr ""
-#: part/models.py:3110
+#: part/models.py:3098
msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique"
msgstr ""
-#: part/serializers.py:157 part/serializers.py:189 stock/serializers.py:177
+#: part/serializers.py:152 part/serializers.py:184 stock/serializers.py:169
msgid "Purchase currency of this stock item"
msgstr "Валюта покупки этой единицы хранения"
-#: part/serializers.py:923
+#: part/serializers.py:918
msgid "Select part to copy BOM from"
msgstr ""
-#: part/serializers.py:934
+#: part/serializers.py:929
msgid "Remove Existing Data"
msgstr ""
-#: part/serializers.py:935
+#: part/serializers.py:930
msgid "Remove existing BOM items before copying"
msgstr ""
-#: part/serializers.py:940
+#: part/serializers.py:935
msgid "Include Inherited"
msgstr ""
-#: part/serializers.py:941
+#: part/serializers.py:936
msgid "Include BOM items which are inherited from templated parts"
msgstr ""
-#: part/serializers.py:946
+#: part/serializers.py:941
msgid "Skip Invalid Rows"
msgstr ""
-#: part/serializers.py:947
+#: part/serializers.py:942
msgid "Enable this option to skip invalid rows"
msgstr ""
-#: part/serializers.py:952
+#: part/serializers.py:947
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:953
+#: part/serializers.py:948
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
-#: part/serializers.py:997
+#: part/serializers.py:992
msgid "Clear Existing BOM"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:993
msgid "Delete existing BOM items before uploading"
msgstr ""
-#: part/serializers.py:1025
+#: part/serializers.py:1020
msgid "No part column specified"
msgstr ""
-#: part/serializers.py:1068
+#: part/serializers.py:1063
msgid "Multiple matching parts found"
msgstr ""
-#: part/serializers.py:1071
+#: part/serializers.py:1066
msgid "No matching part found"
msgstr "Подходящая деталь не найдена"
-#: part/serializers.py:1074
+#: part/serializers.py:1069
msgid "Part is not designated as a component"
msgstr ""
-#: part/serializers.py:1083
+#: part/serializers.py:1078
msgid "Quantity not provided"
msgstr ""
-#: part/serializers.py:1091
+#: part/serializers.py:1086
msgid "Invalid quantity"
msgstr ""
-#: part/serializers.py:1110
+#: part/serializers.py:1105
msgid "At least one BOM item is required"
msgstr ""
-#: part/tasks.py:15
+#: part/tasks.py:14
msgid "Low stock notification"
msgstr ""
-#: part/tasks.py:16
+#: part/tasks.py:15
#, python-brace-format
msgid "The available stock for {part.name} has fallen below the configured minimum level"
msgstr ""
@@ -5100,7 +5101,7 @@ msgstr ""
msgid "This part is a variant of %(link)s"
msgstr "Эта деталь является разновидностью %(link)s"
-#: part/templates/part/part_base.html:194 templates/js/translated/order.js:3150
+#: part/templates/part/part_base.html:194 templates/js/translated/order.js:3305
#: templates/js/translated/table_filters.js:193
msgid "In Stock"
msgstr "На складе"
@@ -5391,93 +5392,93 @@ msgstr "Создать новую разновидность детали"
msgid "Create a new variant of template '%(full_name)s'."
msgstr "Создать новую разновидность из шаблона '%(full_name)s'."
-#: part/templatetags/inventree_extras.py:191
+#: part/templatetags/inventree_extras.py:186
msgid "Unknown database"
msgstr "Неизвестная база данных"
-#: part/templatetags/inventree_extras.py:228
+#: part/templatetags/inventree_extras.py:223
#, python-brace-format
msgid "{title} v{version}"
msgstr ""
-#: part/views.py:85
+#: part/views.py:74
msgid "Set Part Category"
msgstr "Укажите категорию"
-#: part/views.py:135
+#: part/views.py:124
#, python-brace-format
msgid "Set category for {n} parts"
msgstr ""
-#: part/views.py:207
+#: part/views.py:196
msgid "Match References"
msgstr ""
-#: part/views.py:508
+#: part/views.py:497
msgid "None"
msgstr ""
-#: part/views.py:567
+#: part/views.py:556
msgid "Part QR Code"
msgstr ""
-#: part/views.py:669
+#: part/views.py:658
msgid "Select Part Image"
msgstr ""
-#: part/views.py:695
+#: part/views.py:684
msgid "Updated part image"
msgstr ""
-#: part/views.py:698
+#: part/views.py:687
msgid "Part image not found"
msgstr "Изображение детали не найдено"
-#: part/views.py:786
+#: part/views.py:775
msgid "Confirm Part Deletion"
msgstr ""
-#: part/views.py:793
+#: part/views.py:782
msgid "Part was deleted"
msgstr "Деталь была удалена"
-#: part/views.py:802
+#: part/views.py:791
msgid "Part Pricing"
msgstr ""
-#: part/views.py:951
+#: part/views.py:940
msgid "Create Part Parameter Template"
msgstr ""
-#: part/views.py:961
+#: part/views.py:950
msgid "Edit Part Parameter Template"
msgstr ""
-#: part/views.py:968
+#: part/views.py:957
msgid "Delete Part Parameter Template"
msgstr ""
-#: part/views.py:1010
+#: part/views.py:999
msgid "Delete Part Category"
msgstr "Удалить категорию"
-#: part/views.py:1016
+#: part/views.py:1005
msgid "Part category was deleted"
msgstr "Категория удалена"
-#: part/views.py:1025
+#: part/views.py:1014
msgid "Create Category Parameter Template"
msgstr ""
-#: part/views.py:1126
+#: part/views.py:1115
msgid "Edit Category Parameter Template"
msgstr ""
-#: part/views.py:1182
+#: part/views.py:1171
msgid "Delete Category Parameter Template"
msgstr ""
-#: plugin/apps.py:49
+#: plugin/apps.py:48
msgid "Your enviroment has an outdated git version. This prevents InvenTree from loading plugin details."
msgstr ""
@@ -5489,47 +5490,47 @@ msgstr "Действие не указано"
msgid "No matching action found"
msgstr "Соответствующее действие не найдено"
-#: plugin/base/barcodes/api.py:53 plugin/base/barcodes/api.py:153
+#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:152
msgid "Must provide barcode_data parameter"
msgstr "Должен быть предоставлен параметр штрихкода"
-#: plugin/base/barcodes/api.py:129
+#: plugin/base/barcodes/api.py:128
msgid "No match found for barcode data"
msgstr "Не найдено совпадений для данных штрих-кода"
-#: plugin/base/barcodes/api.py:131
+#: plugin/base/barcodes/api.py:130
msgid "Match found for barcode data"
msgstr "Найдено совпадение по штрих-коду"
-#: plugin/base/barcodes/api.py:156
+#: plugin/base/barcodes/api.py:155
msgid "Must provide stockitem parameter"
msgstr "Необходимо предоставить параметр инвентаря"
-#: plugin/base/barcodes/api.py:163
+#: plugin/base/barcodes/api.py:162
msgid "No matching stock item found"
msgstr "Не найдено совпадающих элементов инвентаря"
-#: plugin/base/barcodes/api.py:193
+#: plugin/base/barcodes/api.py:192
msgid "Barcode already matches Stock Item"
msgstr ""
-#: plugin/base/barcodes/api.py:197
+#: plugin/base/barcodes/api.py:196
msgid "Barcode already matches Stock Location"
msgstr ""
-#: plugin/base/barcodes/api.py:201
+#: plugin/base/barcodes/api.py:200
msgid "Barcode already matches Part"
msgstr "Штрих-код уже совпадает с Компонентом"
-#: plugin/base/barcodes/api.py:207 plugin/base/barcodes/api.py:219
+#: plugin/base/barcodes/api.py:206 plugin/base/barcodes/api.py:218
msgid "Barcode hash already matches Stock Item"
msgstr ""
-#: plugin/base/barcodes/api.py:225
+#: plugin/base/barcodes/api.py:224
msgid "Barcode associated with Stock Item"
msgstr ""
-#: plugin/base/label/label.py:40
+#: plugin/base/label/label.py:39
msgid "Label printing failed"
msgstr ""
@@ -5551,51 +5552,51 @@ msgstr "Включить уведомления по электронной по
msgid "Allow sending of emails for event notifications"
msgstr "Разрешить отправку уведомлений о событиях по электронной почте"
-#: plugin/models.py:36
+#: plugin/models.py:35
msgid "Plugin Metadata"
msgstr ""
-#: plugin/models.py:37
+#: plugin/models.py:36
msgid "JSON metadata field, for use by external plugins"
msgstr ""
-#: plugin/models.py:86
+#: plugin/models.py:85
msgid "Plugin Configuration"
msgstr ""
-#: plugin/models.py:87
+#: plugin/models.py:86
msgid "Plugin Configurations"
msgstr ""
-#: plugin/models.py:92
+#: plugin/models.py:91
msgid "Key"
msgstr ""
-#: plugin/models.py:93
+#: plugin/models.py:92
msgid "Key of plugin"
msgstr ""
-#: plugin/models.py:101
+#: plugin/models.py:100
msgid "PluginName of the plugin"
msgstr ""
-#: plugin/models.py:107
+#: plugin/models.py:106
msgid "Is the plugin active"
msgstr ""
-#: plugin/models.py:180
+#: plugin/models.py:179
msgid "Plugin"
msgstr ""
-#: plugin/models.py:254
+#: plugin/models.py:253
msgid "Method"
msgstr ""
-#: plugin/plugin.py:247
+#: plugin/plugin.py:246
msgid "No author found"
msgstr "Автор не найден"
-#: plugin/plugin.py:261
+#: plugin/plugin.py:260
msgid "No date found"
msgstr "Дата не найдена"
@@ -5663,92 +5664,96 @@ msgstr ""
msgid "Either packagename of URL must be provided"
msgstr ""
-#: report/api.py:233 report/api.py:280
+#: report/api.py:191
+msgid "No valid objects provided to template"
+msgstr ""
+
+#: report/api.py:223 report/api.py:270
#, python-brace-format
msgid "Template file '{template}' is missing or does not exist"
msgstr ""
-#: report/models.py:175
+#: report/models.py:170
msgid "Template name"
msgstr "Название шаблона"
-#: report/models.py:181
+#: report/models.py:176
msgid "Report template file"
msgstr "Файл шаблона отчёта"
-#: report/models.py:188
+#: report/models.py:183
msgid "Report template description"
msgstr ""
-#: report/models.py:194
+#: report/models.py:189
msgid "Report revision number (auto-increments)"
msgstr ""
-#: report/models.py:285
+#: report/models.py:280
msgid "Pattern for generating report filenames"
msgstr ""
-#: report/models.py:292
+#: report/models.py:287
msgid "Report template is enabled"
msgstr ""
-#: report/models.py:316
+#: report/models.py:311
msgid "StockItem query filters (comma-separated list of key=value pairs)"
msgstr ""
-#: report/models.py:324
+#: report/models.py:319
msgid "Include Installed Tests"
msgstr ""
-#: report/models.py:325
+#: report/models.py:320
msgid "Include test results for stock items installed inside assembled item"
msgstr ""
-#: report/models.py:375
+#: report/models.py:370
msgid "Build Filters"
msgstr ""
-#: report/models.py:376
+#: report/models.py:371
msgid "Build query filters (comma-separated list of key=value pairs"
msgstr ""
-#: report/models.py:418
+#: report/models.py:413
msgid "Part Filters"
msgstr ""
-#: report/models.py:419
+#: report/models.py:414
msgid "Part query filters (comma-separated list of key=value pairs"
msgstr ""
-#: report/models.py:453
+#: report/models.py:448
msgid "Purchase order query filters"
msgstr ""
-#: report/models.py:492
+#: report/models.py:487
msgid "Sales order query filters"
msgstr ""
-#: report/models.py:547
+#: report/models.py:542
msgid "Snippet"
msgstr ""
-#: report/models.py:548
+#: report/models.py:543
msgid "Report snippet file"
msgstr ""
-#: report/models.py:552
+#: report/models.py:547
msgid "Snippet file description"
msgstr ""
-#: report/models.py:587
+#: report/models.py:582
msgid "Asset"
msgstr ""
-#: report/models.py:588
+#: report/models.py:583
msgid "Report asset file"
msgstr ""
-#: report/models.py:591
+#: report/models.py:586
msgid "Asset file description"
msgstr ""
@@ -5765,12 +5770,12 @@ msgid "Stock Item Test Report"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:79
-#: stock/models.py:664 stock/templates/stock/item_base.html:162
+#: stock/models.py:655 stock/templates/stock/item_base.html:162
#: templates/js/translated/build.js:420 templates/js/translated/build.js:572
#: templates/js/translated/build.js:1178 templates/js/translated/build.js:1688
#: templates/js/translated/model_renderers.js:106
-#: templates/js/translated/order.js:108 templates/js/translated/order.js:2836
-#: templates/js/translated/order.js:2925 templates/js/translated/stock.js:435
+#: templates/js/translated/order.js:109 templates/js/translated/order.js:2991
+#: templates/js/translated/order.js:3080 templates/js/translated/stock.js:435
msgid "Serial Number"
msgstr "Серийный номер"
@@ -5779,19 +5784,19 @@ msgid "Test Results"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:93
-#: stock/models.py:2192
+#: stock/models.py:2183
msgid "Test"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:94
-#: stock/models.py:2198
+#: stock/models.py:2189
msgid "Result"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:97
#: templates/InvenTree/settings/plugin.html:51
#: templates/InvenTree/settings/plugin_settings.html:38
-#: templates/js/translated/order.js:1469 templates/js/translated/stock.js:2345
+#: templates/js/translated/order.js:1575 templates/js/translated/stock.js:2345
msgid "Date"
msgstr ""
@@ -5814,362 +5819,362 @@ msgstr ""
msgid "Serial"
msgstr ""
-#: stock/api.py:554
+#: stock/api.py:542
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:561
+#: stock/api.py:549
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:586
+#: stock/api.py:574
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/models.py:91 stock/models.py:759
+#: stock/models.py:82 stock/models.py:750
#: stock/templates/stock/item_base.html:417
msgid "Owner"
msgstr ""
-#: stock/models.py:92 stock/models.py:760
+#: stock/models.py:83 stock/models.py:751
msgid "Select Owner"
msgstr ""
-#: stock/models.py:468
+#: stock/models.py:459
msgid "StockItem with this serial number already exists"
msgstr ""
-#: stock/models.py:512
+#: stock/models.py:503
#, python-brace-format
msgid "Part type ('{pf}') must be {pe}"
msgstr ""
-#: stock/models.py:522 stock/models.py:531
+#: stock/models.py:513 stock/models.py:522
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:523
+#: stock/models.py:514
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:545
+#: stock/models.py:536
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:551
+#: stock/models.py:542
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:565
+#: stock/models.py:556
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:608
+#: stock/models.py:599
msgid "Parent Stock Item"
msgstr "Родительская единица хранения"
-#: stock/models.py:617
+#: stock/models.py:608
msgid "Base part"
msgstr "Базовая деталь"
-#: stock/models.py:625
+#: stock/models.py:616
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:631 stock/templates/stock/location.html:17
+#: stock/models.py:622 stock/templates/stock/location.html:17
#: stock/templates/stock/stock_app_base.html:8
msgid "Stock Location"
msgstr "Место хранения"
-#: stock/models.py:634
+#: stock/models.py:625
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:641
+#: stock/models.py:632
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:647 stock/templates/stock/item_base.html:288
+#: stock/models.py:638 stock/templates/stock/item_base.html:288
msgid "Installed In"
msgstr ""
-#: stock/models.py:650
+#: stock/models.py:641
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:666
+#: stock/models.py:657
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:680
+#: stock/models.py:671
msgid "Batch code for this stock item"
msgstr "Код партии для этой единицы хранения"
-#: stock/models.py:685
+#: stock/models.py:676
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:694
+#: stock/models.py:685
msgid "Source Build"
msgstr "Исходная сборка"
-#: stock/models.py:696
+#: stock/models.py:687
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:707
+#: stock/models.py:698
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:710
+#: stock/models.py:701
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:716
+#: stock/models.py:707
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:722 stock/templates/stock/item_base.html:199
+#: stock/models.py:713 stock/templates/stock/item_base.html:199
#: templates/js/translated/stock.js:1822
msgid "Expiry Date"
msgstr ""
-#: stock/models.py:723
+#: stock/models.py:714
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:736
+#: stock/models.py:727
msgid "Delete on deplete"
msgstr "Удалить при обнулении"
-#: stock/models.py:736
+#: stock/models.py:727
msgid "Delete this Stock Item when stock is depleted"
msgstr "Удалить эту единицу хранения при обнулении складского запаса"
-#: stock/models.py:746 stock/templates/stock/item.html:137
+#: stock/models.py:737 stock/templates/stock/item.html:137
msgid "Stock Item Notes"
msgstr "Заметки о единице хранения"
-#: stock/models.py:755
+#: stock/models.py:746
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:787
+#: stock/models.py:778
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1307
+#: stock/models.py:1298
msgid "Part is not set as trackable"
msgstr "Деталь не является отслеживаемой"
-#: stock/models.py:1313
+#: stock/models.py:1304
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1319
+#: stock/models.py:1310
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({n})"
msgstr ""
-#: stock/models.py:1322
+#: stock/models.py:1313
msgid "Serial numbers must be a list of integers"
msgstr ""
-#: stock/models.py:1325
+#: stock/models.py:1316
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1332
+#: stock/models.py:1323
#, python-brace-format
msgid "Serial numbers already exist: {exists}"
msgstr ""
-#: stock/models.py:1403
+#: stock/models.py:1394
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:1406
+#: stock/models.py:1397
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:1409
+#: stock/models.py:1400
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:1412
+#: stock/models.py:1403
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:1415
+#: stock/models.py:1406
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:1418
+#: stock/models.py:1409
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:1425 stock/serializers.py:871
+#: stock/models.py:1416 stock/serializers.py:863
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:1429
+#: stock/models.py:1420
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:1433
+#: stock/models.py:1424
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:1437
+#: stock/models.py:1428
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:1609
+#: stock/models.py:1600
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2112
+#: stock/models.py:2103
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2169
+#: stock/models.py:2160
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:2175
+#: stock/models.py:2166
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:2193
+#: stock/models.py:2184
msgid "Test name"
msgstr ""
-#: stock/models.py:2199
+#: stock/models.py:2190
msgid "Test result"
msgstr ""
-#: stock/models.py:2205
+#: stock/models.py:2196
msgid "Test output value"
msgstr ""
-#: stock/models.py:2212
+#: stock/models.py:2203
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:2218
+#: stock/models.py:2209
msgid "Test notes"
msgstr ""
-#: stock/serializers.py:170
+#: stock/serializers.py:162
msgid "Purchase price of this stock item"
msgstr ""
-#: stock/serializers.py:291
+#: stock/serializers.py:283
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:306
+#: stock/serializers.py:298
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:312
+#: stock/serializers.py:304
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:323 stock/serializers.py:828 stock/serializers.py:1069
+#: stock/serializers.py:315 stock/serializers.py:820 stock/serializers.py:1061
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:330
+#: stock/serializers.py:322
msgid "Optional note field"
msgstr ""
-#: stock/serializers.py:343
+#: stock/serializers.py:335
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:360
+#: stock/serializers.py:352
msgid "Serial numbers already exist"
msgstr "Серийные номера уже существуют"
-#: stock/serializers.py:402
+#: stock/serializers.py:394
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:418
+#: stock/serializers.py:410
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:425
+#: stock/serializers.py:417
msgid "Selected part is not in the Bill of Materials"
msgstr "Выбранная деталь отсутствует в спецификации"
-#: stock/serializers.py:463
+#: stock/serializers.py:455
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:468
+#: stock/serializers.py:460
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:685
+#: stock/serializers.py:677
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:689
+#: stock/serializers.py:681
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:693
+#: stock/serializers.py:685
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:723
+#: stock/serializers.py:715
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:729
+#: stock/serializers.py:721
msgid "Selected company is not a customer"
msgstr "Выбранная компания не является покупателем"
-#: stock/serializers.py:737
+#: stock/serializers.py:729
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:747 stock/serializers.py:977
+#: stock/serializers.py:739 stock/serializers.py:969
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:835
+#: stock/serializers.py:827
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:840
+#: stock/serializers.py:832
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:841
+#: stock/serializers.py:833
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:846
+#: stock/serializers.py:838
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:847
+#: stock/serializers.py:839
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:857
+#: stock/serializers.py:849
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:939
+#: stock/serializers.py:931
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:967
+#: stock/serializers.py:959
msgid "Stock transaction notes"
msgstr ""
@@ -6482,7 +6487,7 @@ msgid "Sublocations"
msgstr "Места хранения"
#: stock/templates/stock/location.html:156 templates/InvenTree/search.html:164
-#: templates/js/translated/search.js:153 users/models.py:42
+#: templates/js/translated/search.js:153 users/models.py:40
msgid "Stock Locations"
msgstr "Места хранения"
@@ -6534,7 +6539,7 @@ msgstr "Места хранения"
msgid "Child Items"
msgstr ""
-#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:227
+#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:221
msgid "Convert Stock Item"
msgstr ""
@@ -6559,55 +6564,55 @@ msgstr ""
msgid "Are you sure you want to delete this stock tracking entry?"
msgstr ""
-#: stock/views.py:125
+#: stock/views.py:119
msgid "Stock Location QR code"
msgstr ""
-#: stock/views.py:144
+#: stock/views.py:138
msgid "Return to Stock"
msgstr ""
-#: stock/views.py:153
+#: stock/views.py:147
msgid "Specify a valid location"
msgstr ""
-#: stock/views.py:164
+#: stock/views.py:158
msgid "Stock item returned from customer"
msgstr ""
-#: stock/views.py:175
+#: stock/views.py:169
msgid "Delete All Test Data"
msgstr ""
-#: stock/views.py:192
+#: stock/views.py:186
msgid "Confirm test data deletion"
msgstr ""
-#: stock/views.py:193
+#: stock/views.py:187
msgid "Check the confirmation box"
msgstr ""
-#: stock/views.py:208
+#: stock/views.py:202
msgid "Stock Item QR Code"
msgstr ""
-#: stock/views.py:264
+#: stock/views.py:258
msgid "Delete Stock Location"
msgstr ""
-#: stock/views.py:277
+#: stock/views.py:271
msgid "Delete Stock Item"
msgstr ""
-#: stock/views.py:288
+#: stock/views.py:282
msgid "Delete Stock Tracking Entry"
msgstr ""
-#: stock/views.py:295
+#: stock/views.py:289
msgid "Edit Stock Tracking Entry"
msgstr ""
-#: stock/views.py:304
+#: stock/views.py:298
msgid "Add Stock Tracking Entry"
msgstr ""
@@ -6881,7 +6886,7 @@ msgid "Install Plugin"
msgstr ""
#: templates/InvenTree/settings/plugin.html:48 templates/navbar.html:137
-#: users/models.py:39
+#: users/models.py:37
msgid "Admin"
msgstr ""
@@ -7326,9 +7331,9 @@ msgstr ""
#: templates/about.html:11 templates/about.html:105
#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621
-#: templates/js/translated/modals.js:55 templates/js/translated/modals.js:591
-#: templates/js/translated/modals.js:685 templates/js/translated/modals.js:993
-#: templates/js/translated/order.js:807 templates/modals.html:15
+#: templates/js/translated/modals.js:55 templates/js/translated/modals.js:594
+#: templates/js/translated/modals.js:688 templates/js/translated/modals.js:996
+#: templates/js/translated/order.js:913 templates/modals.html:15
#: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50
msgid "Close"
msgstr ""
@@ -7639,11 +7644,11 @@ msgstr "Удалённый сервер должен быть доступен"
msgid "Remote image must not exceed maximum allowable file size"
msgstr ""
-#: templates/js/translated/api.js:190 templates/js/translated/modals.js:1063
+#: templates/js/translated/api.js:190 templates/js/translated/modals.js:1066
msgid "No Response"
msgstr ""
-#: templates/js/translated/api.js:191 templates/js/translated/modals.js:1064
+#: templates/js/translated/api.js:191 templates/js/translated/modals.js:1067
msgid "No response from the InvenTree server"
msgstr ""
@@ -7655,27 +7660,27 @@ msgstr "Ошибка 400: Некорректный запрос"
msgid "API request returned error code 400"
msgstr "API-запрос вернул код ошибки 400"
-#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1073
+#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1076
msgid "Error 401: Not Authenticated"
msgstr "Ошибка 401: Авторизация не выполнена"
-#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1074
+#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1077
msgid "Authentication credentials not supplied"
msgstr ""
-#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1078
+#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1081
msgid "Error 403: Permission Denied"
msgstr "Ошибка 403: Доступ запрещён"
-#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1079
+#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1082
msgid "You do not have the required permissions to access this function"
msgstr "У вас нет прав доступа к этой функции"
-#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1083
+#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1086
msgid "Error 404: Resource Not Found"
msgstr "Ошибка 404: Ресурс не найден"
-#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1084
+#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1087
msgid "The requested resource could not be located on the server"
msgstr ""
@@ -7687,11 +7692,11 @@ msgstr "Ошибка 405: Метод не разрешён"
msgid "HTTP method not allowed at URL"
msgstr ""
-#: templates/js/translated/api.js:222 templates/js/translated/modals.js:1088
+#: templates/js/translated/api.js:222 templates/js/translated/modals.js:1091
msgid "Error 408: Timeout"
msgstr "Ошибка 408: Таймаут"
-#: templates/js/translated/api.js:223 templates/js/translated/modals.js:1089
+#: templates/js/translated/api.js:223 templates/js/translated/modals.js:1092
msgid "Connection timeout while requesting data from server"
msgstr ""
@@ -7760,7 +7765,7 @@ msgid "Unknown response from server"
msgstr ""
#: templates/js/translated/barcode.js:182
-#: templates/js/translated/modals.js:1053
+#: templates/js/translated/modals.js:1056
msgid "Invalid server response"
msgstr ""
@@ -7842,12 +7847,12 @@ msgid "Download BOM Template"
msgstr "Скачать шаблон BOM"
#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287
-#: templates/js/translated/order.js:588 templates/js/translated/tables.js:53
+#: templates/js/translated/order.js:694 templates/js/translated/tables.js:53
msgid "Format"
msgstr ""
#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288
-#: templates/js/translated/order.js:589
+#: templates/js/translated/order.js:695
msgid "Select file format"
msgstr ""
@@ -8147,12 +8152,12 @@ msgid "No required tests for this build"
msgstr ""
#: templates/js/translated/build.js:1727 templates/js/translated/build.js:2556
-#: templates/js/translated/order.js:2873
+#: templates/js/translated/order.js:3028
msgid "Edit stock allocation"
msgstr ""
#: templates/js/translated/build.js:1729 templates/js/translated/build.js:2557
-#: templates/js/translated/order.js:2874
+#: templates/js/translated/order.js:3029
msgid "Delete stock allocation"
msgstr ""
@@ -8181,11 +8186,11 @@ msgid "Sufficient stock available"
msgstr ""
#: templates/js/translated/build.js:1856 templates/js/translated/build.js:2101
-#: templates/js/translated/build.js:2552 templates/js/translated/order.js:3160
+#: templates/js/translated/build.js:2552 templates/js/translated/order.js:3315
msgid "Allocated"
msgstr ""
-#: templates/js/translated/build.js:1904 templates/js/translated/order.js:3240
+#: templates/js/translated/build.js:1904 templates/js/translated/order.js:3395
msgid "Build stock"
msgstr ""
@@ -8193,21 +8198,21 @@ msgstr ""
msgid "Order stock"
msgstr ""
-#: templates/js/translated/build.js:1911 templates/js/translated/order.js:3233
+#: templates/js/translated/build.js:1911 templates/js/translated/order.js:3388
msgid "Allocate stock"
msgstr ""
#: templates/js/translated/build.js:1950 templates/js/translated/label.js:172
-#: templates/js/translated/order.js:635 templates/js/translated/order.js:2449
+#: templates/js/translated/order.js:741 templates/js/translated/order.js:2555
#: templates/js/translated/report.js:225
msgid "Select Parts"
msgstr ""
-#: templates/js/translated/build.js:1951 templates/js/translated/order.js:2450
+#: templates/js/translated/build.js:1951 templates/js/translated/order.js:2556
msgid "You must select at least one part to allocate"
msgstr ""
-#: templates/js/translated/build.js:2000 templates/js/translated/order.js:2398
+#: templates/js/translated/build.js:2000 templates/js/translated/order.js:2504
msgid "Specify stock allocation quantity"
msgstr ""
@@ -8219,7 +8224,7 @@ msgstr ""
msgid "All selected parts have been fully allocated"
msgstr ""
-#: templates/js/translated/build.js:2089 templates/js/translated/order.js:2464
+#: templates/js/translated/build.js:2089 templates/js/translated/order.js:2570
msgid "Select source location (leave blank to take from all locations)"
msgstr ""
@@ -8227,11 +8232,11 @@ msgstr ""
msgid "Allocate Stock Items to Build Order"
msgstr ""
-#: templates/js/translated/build.js:2128 templates/js/translated/order.js:2512
+#: templates/js/translated/build.js:2128 templates/js/translated/order.js:2667
msgid "No matching stock locations"
msgstr ""
-#: templates/js/translated/build.js:2200 templates/js/translated/order.js:2589
+#: templates/js/translated/build.js:2200 templates/js/translated/order.js:2744
msgid "No matching stock items"
msgstr ""
@@ -8305,7 +8310,7 @@ msgstr "Редактировать деталь производителя"
msgid "Delete Manufacturer Part"
msgstr "Удалить деталь производителя"
-#: templates/js/translated/company.js:165 templates/js/translated/order.js:385
+#: templates/js/translated/company.js:165 templates/js/translated/order.js:491
msgid "Add Supplier"
msgstr "Добавить поставщика"
@@ -8440,40 +8445,40 @@ msgstr "Операция удаления не разрешена"
msgid "View operation not allowed"
msgstr "Операция просмотра не разрешена"
-#: templates/js/translated/forms.js:641
+#: templates/js/translated/forms.js:646
msgid "Keep this form open"
msgstr ""
-#: templates/js/translated/forms.js:716
+#: templates/js/translated/forms.js:746
msgid "Enter a valid number"
msgstr ""
-#: templates/js/translated/forms.js:1208 templates/modals.html:19
+#: templates/js/translated/forms.js:1238 templates/modals.html:19
#: templates/modals.html:43
msgid "Form errors exist"
msgstr "Форма содержит ошибки"
-#: templates/js/translated/forms.js:1634
+#: templates/js/translated/forms.js:1671
msgid "No results found"
msgstr "Не найдено"
-#: templates/js/translated/forms.js:1849 templates/search.html:29
+#: templates/js/translated/forms.js:1886 templates/search.html:29
msgid "Searching"
msgstr ""
-#: templates/js/translated/forms.js:2102
+#: templates/js/translated/forms.js:2139
msgid "Clear input"
msgstr ""
-#: templates/js/translated/forms.js:2567
+#: templates/js/translated/forms.js:2605
msgid "File Column"
msgstr ""
-#: templates/js/translated/forms.js:2567
+#: templates/js/translated/forms.js:2605
msgid "Field Name"
msgstr ""
-#: templates/js/translated/forms.js:2579
+#: templates/js/translated/forms.js:2617
msgid "Select Columns"
msgstr ""
@@ -8547,62 +8552,62 @@ msgstr ""
msgid "Select Label Template"
msgstr ""
-#: templates/js/translated/modals.js:78 templates/js/translated/modals.js:138
-#: templates/js/translated/modals.js:617
+#: templates/js/translated/modals.js:81 templates/js/translated/modals.js:141
+#: templates/js/translated/modals.js:620
msgid "Cancel"
msgstr "Отменить"
-#: templates/js/translated/modals.js:79 templates/js/translated/modals.js:137
-#: templates/js/translated/modals.js:684 templates/js/translated/modals.js:992
+#: templates/js/translated/modals.js:82 templates/js/translated/modals.js:140
+#: templates/js/translated/modals.js:687 templates/js/translated/modals.js:995
#: templates/modals.html:28 templates/modals.html:51
msgid "Submit"
msgstr "Подтвердить"
-#: templates/js/translated/modals.js:136
+#: templates/js/translated/modals.js:139
msgid "Form Title"
msgstr ""
-#: templates/js/translated/modals.js:399
+#: templates/js/translated/modals.js:402
msgid "Waiting for server..."
msgstr ""
-#: templates/js/translated/modals.js:558
+#: templates/js/translated/modals.js:561
msgid "Show Error Information"
msgstr ""
-#: templates/js/translated/modals.js:616
+#: templates/js/translated/modals.js:619
msgid "Accept"
msgstr ""
-#: templates/js/translated/modals.js:673
+#: templates/js/translated/modals.js:676
msgid "Loading Data"
msgstr ""
-#: templates/js/translated/modals.js:944
+#: templates/js/translated/modals.js:947
msgid "Invalid response from server"
msgstr ""
-#: templates/js/translated/modals.js:944
+#: templates/js/translated/modals.js:947
msgid "Form data missing from server response"
msgstr ""
-#: templates/js/translated/modals.js:956
+#: templates/js/translated/modals.js:959
msgid "Error posting form data"
msgstr "Ошибка отправки данных формы"
-#: templates/js/translated/modals.js:1053
+#: templates/js/translated/modals.js:1056
msgid "JSON response missing form data"
msgstr ""
-#: templates/js/translated/modals.js:1068
+#: templates/js/translated/modals.js:1071
msgid "Error 400: Bad Request"
msgstr "Ошибка 400: Некорректный запрос"
-#: templates/js/translated/modals.js:1069
+#: templates/js/translated/modals.js:1072
msgid "Server returned error code 400"
msgstr "Сервер вернул код ошибки 400"
-#: templates/js/translated/modals.js:1092
+#: templates/js/translated/modals.js:1095
msgid "Error requesting form data"
msgstr "Ошибка запроса данных формы"
@@ -8660,361 +8665,377 @@ msgstr ""
msgid "Notifications will load here"
msgstr ""
-#: templates/js/translated/order.js:84
+#: templates/js/translated/order.js:85
msgid "No stock items have been allocated to this shipment"
msgstr ""
-#: templates/js/translated/order.js:89
+#: templates/js/translated/order.js:90
msgid "The following stock items will be shipped"
msgstr ""
-#: templates/js/translated/order.js:129
+#: templates/js/translated/order.js:130
msgid "Complete Shipment"
msgstr ""
-#: templates/js/translated/order.js:135
+#: templates/js/translated/order.js:141
msgid "Confirm Shipment"
msgstr ""
-#: templates/js/translated/order.js:157
+#: templates/js/translated/order.js:197
+msgid "No pending shipments found"
+msgstr ""
+
+#: templates/js/translated/order.js:201
+msgid "No stock items have been allocated to pending shipments"
+msgstr ""
+
+#: templates/js/translated/order.js:233
+msgid "Skip"
+msgstr ""
+
+#: templates/js/translated/order.js:263
msgid "Complete Purchase Order"
msgstr ""
-#: templates/js/translated/order.js:163
+#: templates/js/translated/order.js:269
msgid "Mark this order as complete?"
msgstr ""
-#: templates/js/translated/order.js:169
+#: templates/js/translated/order.js:275
msgid "All line items have been received"
msgstr ""
-#: templates/js/translated/order.js:174
+#: templates/js/translated/order.js:280
msgid "This order has line items which have not been marked as received."
msgstr ""
-#: templates/js/translated/order.js:175
+#: templates/js/translated/order.js:281
msgid "Completing this order means that the order and line items will no longer be editable."
msgstr ""
-#: templates/js/translated/order.js:198
+#: templates/js/translated/order.js:304
msgid "Cancel Purchase Order"
msgstr ""
-#: templates/js/translated/order.js:203
+#: templates/js/translated/order.js:309
msgid "Are you sure you wish to cancel this purchase order?"
msgstr ""
-#: templates/js/translated/order.js:209
+#: templates/js/translated/order.js:315
msgid "This purchase order can not be cancelled"
msgstr ""
-#: templates/js/translated/order.js:232
+#: templates/js/translated/order.js:338
msgid "Issue Purchase Order"
msgstr ""
-#: templates/js/translated/order.js:237
+#: templates/js/translated/order.js:343
msgid "After placing this purchase order, line items will no longer be editable."
msgstr ""
-#: templates/js/translated/order.js:259
+#: templates/js/translated/order.js:365
msgid "Cancel Sales Order"
msgstr ""
-#: templates/js/translated/order.js:264
+#: templates/js/translated/order.js:370
msgid "Cancelling this order means that the order will no longer be editable."
msgstr "Отмена этого заказа означает, что заказ нельзя будет редактировать."
-#: templates/js/translated/order.js:318
+#: templates/js/translated/order.js:424
msgid "Create New Shipment"
msgstr ""
-#: templates/js/translated/order.js:343
+#: templates/js/translated/order.js:449
msgid "Add Customer"
msgstr ""
-#: templates/js/translated/order.js:368
+#: templates/js/translated/order.js:474
msgid "Create Sales Order"
msgstr ""
-#: templates/js/translated/order.js:585
+#: templates/js/translated/order.js:691
msgid "Export Order"
msgstr ""
-#: templates/js/translated/order.js:636
+#: templates/js/translated/order.js:742
msgid "At least one purchaseable part must be selected"
msgstr ""
-#: templates/js/translated/order.js:661
+#: templates/js/translated/order.js:767
msgid "Quantity to order"
msgstr ""
-#: templates/js/translated/order.js:670
+#: templates/js/translated/order.js:776
msgid "New supplier part"
msgstr ""
-#: templates/js/translated/order.js:688
+#: templates/js/translated/order.js:794
msgid "New purchase order"
msgstr ""
-#: templates/js/translated/order.js:721
+#: templates/js/translated/order.js:827
msgid "Add to purchase order"
msgstr ""
-#: templates/js/translated/order.js:830
+#: templates/js/translated/order.js:936
msgid "No matching supplier parts"
msgstr ""
-#: templates/js/translated/order.js:845
+#: templates/js/translated/order.js:951
msgid "No matching purchase orders"
msgstr ""
-#: templates/js/translated/order.js:1001
+#: templates/js/translated/order.js:1107
msgid "Select Line Items"
msgstr ""
-#: templates/js/translated/order.js:1002
+#: templates/js/translated/order.js:1108
msgid "At least one line item must be selected"
msgstr ""
-#: templates/js/translated/order.js:1022 templates/js/translated/order.js:1121
+#: templates/js/translated/order.js:1128 templates/js/translated/order.js:1227
msgid "Add batch code"
msgstr "Добавить код партии"
-#: templates/js/translated/order.js:1028 templates/js/translated/order.js:1132
+#: templates/js/translated/order.js:1134 templates/js/translated/order.js:1238
msgid "Add serial numbers"
msgstr ""
-#: templates/js/translated/order.js:1040
+#: templates/js/translated/order.js:1146
msgid "Quantity to receive"
msgstr ""
-#: templates/js/translated/order.js:1104 templates/js/translated/stock.js:2085
+#: templates/js/translated/order.js:1210 templates/js/translated/stock.js:2085
msgid "Stock Status"
msgstr ""
-#: templates/js/translated/order.js:1195
+#: templates/js/translated/order.js:1301
msgid "Order Code"
msgstr ""
-#: templates/js/translated/order.js:1196
+#: templates/js/translated/order.js:1302
msgid "Ordered"
msgstr ""
-#: templates/js/translated/order.js:1198
+#: templates/js/translated/order.js:1304
msgid "Quantity to Receive"
msgstr ""
-#: templates/js/translated/order.js:1217
+#: templates/js/translated/order.js:1323
msgid "Confirm receipt of items"
msgstr ""
-#: templates/js/translated/order.js:1218
+#: templates/js/translated/order.js:1324
msgid "Receive Purchase Order Items"
msgstr ""
-#: templates/js/translated/order.js:1410 templates/js/translated/part.js:870
+#: templates/js/translated/order.js:1516 templates/js/translated/part.js:870
msgid "No purchase orders found"
msgstr "Заказов на закупку не найдено"
-#: templates/js/translated/order.js:1435 templates/js/translated/order.js:2120
+#: templates/js/translated/order.js:1541 templates/js/translated/order.js:2226
msgid "Order is overdue"
msgstr ""
-#: templates/js/translated/order.js:1485 templates/js/translated/order.js:2185
-#: templates/js/translated/order.js:2315
+#: templates/js/translated/order.js:1591 templates/js/translated/order.js:2291
+#: templates/js/translated/order.js:2421
msgid "Items"
msgstr ""
-#: templates/js/translated/order.js:1559 templates/js/translated/order.js:3292
+#: templates/js/translated/order.js:1665 templates/js/translated/order.js:3447
msgid "Duplicate Line Item"
msgstr ""
-#: templates/js/translated/order.js:1576 templates/js/translated/order.js:3314
+#: templates/js/translated/order.js:1682 templates/js/translated/order.js:3469
msgid "Edit Line Item"
msgstr ""
-#: templates/js/translated/order.js:1589 templates/js/translated/order.js:3325
+#: templates/js/translated/order.js:1695 templates/js/translated/order.js:3480
msgid "Delete Line Item"
msgstr ""
-#: templates/js/translated/order.js:1632
+#: templates/js/translated/order.js:1738
msgid "No line items found"
msgstr ""
-#: templates/js/translated/order.js:1659 templates/js/translated/order.js:3049
+#: templates/js/translated/order.js:1765 templates/js/translated/order.js:3204
msgid "Total"
msgstr ""
-#: templates/js/translated/order.js:1713 templates/js/translated/order.js:1915
-#: templates/js/translated/order.js:3074 templates/js/translated/order.js:3557
+#: templates/js/translated/order.js:1819 templates/js/translated/order.js:2021
+#: templates/js/translated/order.js:3229 templates/js/translated/order.js:3714
#: templates/js/translated/part.js:1948 templates/js/translated/part.js:2301
msgid "Unit Price"
msgstr ""
-#: templates/js/translated/order.js:1728 templates/js/translated/order.js:1931
-#: templates/js/translated/order.js:3090 templates/js/translated/order.js:3573
+#: templates/js/translated/order.js:1834 templates/js/translated/order.js:2037
+#: templates/js/translated/order.js:3245 templates/js/translated/order.js:3730
msgid "Total Price"
msgstr "Общая стоимость"
-#: templates/js/translated/order.js:1769 templates/js/translated/order.js:3132
+#: templates/js/translated/order.js:1875 templates/js/translated/order.js:3287
#: templates/js/translated/part.js:979
msgid "This line item is overdue"
msgstr ""
-#: templates/js/translated/order.js:1828 templates/js/translated/part.js:1025
+#: templates/js/translated/order.js:1934 templates/js/translated/part.js:1025
msgid "Receive line item"
msgstr ""
-#: templates/js/translated/order.js:1832 templates/js/translated/order.js:3246
+#: templates/js/translated/order.js:1938 templates/js/translated/order.js:3401
msgid "Duplicate line item"
msgstr ""
-#: templates/js/translated/order.js:1833 templates/js/translated/order.js:3247
+#: templates/js/translated/order.js:1939 templates/js/translated/order.js:3402
msgid "Edit line item"
msgstr ""
-#: templates/js/translated/order.js:1834 templates/js/translated/order.js:3251
+#: templates/js/translated/order.js:1940 templates/js/translated/order.js:3406
msgid "Delete line item"
msgstr ""
-#: templates/js/translated/order.js:1980 templates/js/translated/order.js:3622
+#: templates/js/translated/order.js:2086 templates/js/translated/order.js:3779
msgid "Duplicate line"
msgstr ""
-#: templates/js/translated/order.js:1981 templates/js/translated/order.js:3623
+#: templates/js/translated/order.js:2087 templates/js/translated/order.js:3780
msgid "Edit line"
msgstr ""
-#: templates/js/translated/order.js:1982 templates/js/translated/order.js:3624
+#: templates/js/translated/order.js:2088 templates/js/translated/order.js:3781
msgid "Delete line"
msgstr ""
-#: templates/js/translated/order.js:2012 templates/js/translated/order.js:3654
+#: templates/js/translated/order.js:2118 templates/js/translated/order.js:3811
msgid "Duplicate Line"
msgstr ""
-#: templates/js/translated/order.js:2033 templates/js/translated/order.js:3675
+#: templates/js/translated/order.js:2139 templates/js/translated/order.js:3832
msgid "Edit Line"
msgstr ""
-#: templates/js/translated/order.js:2044 templates/js/translated/order.js:3686
+#: templates/js/translated/order.js:2150 templates/js/translated/order.js:3843
msgid "Delete Line"
msgstr ""
-#: templates/js/translated/order.js:2055
+#: templates/js/translated/order.js:2161
msgid "No matching line"
msgstr ""
-#: templates/js/translated/order.js:2096
+#: templates/js/translated/order.js:2202
msgid "No sales orders found"
msgstr "Заказы на продажу не найдены"
-#: templates/js/translated/order.js:2134
+#: templates/js/translated/order.js:2240
msgid "Invalid Customer"
msgstr ""
-#: templates/js/translated/order.js:2221
+#: templates/js/translated/order.js:2327
msgid "Edit shipment"
msgstr ""
-#: templates/js/translated/order.js:2224
+#: templates/js/translated/order.js:2330
msgid "Complete shipment"
msgstr ""
-#: templates/js/translated/order.js:2229
+#: templates/js/translated/order.js:2335
msgid "Delete shipment"
msgstr ""
-#: templates/js/translated/order.js:2249
+#: templates/js/translated/order.js:2355
msgid "Edit Shipment"
msgstr ""
-#: templates/js/translated/order.js:2266
+#: templates/js/translated/order.js:2372
msgid "Delete Shipment"
msgstr ""
-#: templates/js/translated/order.js:2300
+#: templates/js/translated/order.js:2406
msgid "No matching shipments found"
msgstr ""
-#: templates/js/translated/order.js:2310
+#: templates/js/translated/order.js:2416
msgid "Shipment Reference"
msgstr ""
-#: templates/js/translated/order.js:2334
+#: templates/js/translated/order.js:2440
msgid "Not shipped"
msgstr ""
-#: templates/js/translated/order.js:2340
+#: templates/js/translated/order.js:2446
msgid "Tracking"
msgstr ""
-#: templates/js/translated/order.js:2499
+#: templates/js/translated/order.js:2603
+msgid "Add Shipment"
+msgstr ""
+
+#: templates/js/translated/order.js:2654
msgid "Confirm stock allocation"
msgstr "Подтвердите выделение запасов"
-#: templates/js/translated/order.js:2500
+#: templates/js/translated/order.js:2655
msgid "Allocate Stock Items to Sales Order"
msgstr ""
-#: templates/js/translated/order.js:2708
+#: templates/js/translated/order.js:2863
msgid "No sales order allocations found"
msgstr ""
-#: templates/js/translated/order.js:2789
+#: templates/js/translated/order.js:2944
msgid "Edit Stock Allocation"
msgstr ""
-#: templates/js/translated/order.js:2806
+#: templates/js/translated/order.js:2961
msgid "Confirm Delete Operation"
msgstr ""
-#: templates/js/translated/order.js:2807
+#: templates/js/translated/order.js:2962
msgid "Delete Stock Allocation"
msgstr ""
-#: templates/js/translated/order.js:2850 templates/js/translated/order.js:2939
+#: templates/js/translated/order.js:3005 templates/js/translated/order.js:3094
#: templates/js/translated/stock.js:1545
msgid "Shipped to customer"
msgstr ""
-#: templates/js/translated/order.js:2858 templates/js/translated/order.js:2948
+#: templates/js/translated/order.js:3013 templates/js/translated/order.js:3103
msgid "Stock location not specified"
msgstr ""
-#: templates/js/translated/order.js:3230
+#: templates/js/translated/order.js:3385
msgid "Allocate serial numbers"
msgstr ""
-#: templates/js/translated/order.js:3236
+#: templates/js/translated/order.js:3391
msgid "Purchase stock"
msgstr ""
-#: templates/js/translated/order.js:3243 templates/js/translated/order.js:3439
+#: templates/js/translated/order.js:3398 templates/js/translated/order.js:3596
msgid "Calculate price"
msgstr ""
-#: templates/js/translated/order.js:3255
+#: templates/js/translated/order.js:3410
msgid "Cannot be deleted as items have been shipped"
msgstr ""
-#: templates/js/translated/order.js:3258
+#: templates/js/translated/order.js:3413
msgid "Cannot be deleted as items have been allocated"
msgstr ""
-#: templates/js/translated/order.js:3340
+#: templates/js/translated/order.js:3495
msgid "Allocate Serial Numbers"
msgstr ""
-#: templates/js/translated/order.js:3447
+#: templates/js/translated/order.js:3604
msgid "Update Unit Price"
msgstr ""
-#: templates/js/translated/order.js:3461
+#: templates/js/translated/order.js:3618
msgid "No matching line items"
msgstr ""
-#: templates/js/translated/order.js:3697
+#: templates/js/translated/order.js:3854
msgid "No matching lines"
msgstr ""
@@ -9486,7 +9507,7 @@ msgstr ""
msgid "Add Stock"
msgstr ""
-#: templates/js/translated/stock.js:887 users/models.py:218
+#: templates/js/translated/stock.js:887 users/models.py:216
msgid "Add"
msgstr ""
@@ -10201,58 +10222,59 @@ msgstr ""
msgid "No"
msgstr ""
-#: users/admin.py:62
+#: users/admin.py:61
msgid "Users"
msgstr ""
-#: users/admin.py:63
+#: users/admin.py:62
msgid "Select which users are assigned to this group"
msgstr ""
-#: users/admin.py:185
+#: users/admin.py:184
msgid "The following users are members of multiple groups:"
msgstr ""
-#: users/admin.py:208
+#: users/admin.py:207
msgid "Personal info"
msgstr ""
-#: users/admin.py:209
+#: users/admin.py:208
msgid "Permissions"
msgstr "Права доступа"
-#: users/admin.py:212
+#: users/admin.py:211
msgid "Important dates"
msgstr ""
-#: users/models.py:205
+#: users/models.py:203
msgid "Permission set"
msgstr "Права доступа"
-#: users/models.py:213
+#: users/models.py:211
msgid "Group"
msgstr ""
-#: users/models.py:216
+#: users/models.py:214
msgid "View"
msgstr "Вид"
-#: users/models.py:216
+#: users/models.py:214
msgid "Permission to view items"
msgstr "Разрешение на просмотр элементов"
-#: users/models.py:218
+#: users/models.py:216
msgid "Permission to add items"
msgstr "Разрешение на добавление элементов"
-#: users/models.py:220
+#: users/models.py:218
msgid "Change"
msgstr ""
-#: users/models.py:220
+#: users/models.py:218
msgid "Permissions to edit items"
msgstr "Разрешение на редактирование элементов"
-#: users/models.py:222
+#: users/models.py:220
msgid "Permission to delete items"
msgstr "Разрешение на удаление элементов"
+
diff --git a/InvenTree/locale/sv/LC_MESSAGES/django.po b/InvenTree/locale/sv/LC_MESSAGES/django.po
index d481f680a1..55366dbf9a 100644
--- a/InvenTree/locale/sv/LC_MESSAGES/django.po
+++ b/InvenTree/locale/sv/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-05-20 10:47+0000\n"
-"PO-Revision-Date: 2022-05-21 01:06\n"
+"POT-Creation-Date: 2022-05-23 23:24+0000\n"
+"PO-Revision-Date: 2022-05-24 01:42\n"
"Last-Translator: \n"
"Language-Team: Swedish\n"
"Language: sv_SE\n"
@@ -17,20 +17,20 @@ msgstr ""
"X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 154\n"
-#: InvenTree/api.py:50
+#: InvenTree/api.py:49
msgid "API endpoint not found"
msgstr "API-slutpunkt hittades inte"
-#: InvenTree/exceptions.py:47
+#: InvenTree/exceptions.py:46
msgid "Error details can be found in the admin panel"
msgstr ""
-#: InvenTree/fields.py:98
+#: InvenTree/fields.py:96
msgid "Enter date"
msgstr "Ange datum"
#: InvenTree/forms.py:124 templates/account/email_confirm.html:20
-#: templates/js/translated/forms.js:615
+#: templates/js/translated/forms.js:620
msgid "Confirm"
msgstr "Bekräfta"
@@ -79,7 +79,7 @@ msgstr ""
msgid "Duplicate serial: {sn}"
msgstr ""
-#: InvenTree/helpers.py:456 order/models.py:311 order/models.py:465
+#: InvenTree/helpers.py:456 order/models.py:307 order/models.py:461
msgid "Invalid quantity provided"
msgstr "Ogiltigt antal angivet"
@@ -116,89 +116,89 @@ msgstr "Inga serienummer hittades"
msgid "Number of unique serial numbers ({s}) must match quantity ({q})"
msgstr ""
-#: InvenTree/models.py:183
+#: InvenTree/models.py:181
msgid "Missing file"
msgstr ""
-#: InvenTree/models.py:184
+#: InvenTree/models.py:182
msgid "Missing external link"
msgstr ""
-#: InvenTree/models.py:195 stock/models.py:2211
+#: InvenTree/models.py:193 stock/models.py:2202
#: templates/js/translated/attachment.js:119
msgid "Attachment"
msgstr "Bilaga"
-#: InvenTree/models.py:196
+#: InvenTree/models.py:194
msgid "Select file to attach"
msgstr "Välj fil att bifoga"
-#: InvenTree/models.py:202 company/models.py:129 company/models.py:343
-#: company/models.py:575 order/models.py:136 part/models.py:867
+#: InvenTree/models.py:200 company/models.py:123 company/models.py:337
+#: company/models.py:569 order/models.py:132 part/models.py:855
#: report/templates/report/inventree_build_order_base.html:165
#: templates/js/translated/company.js:540
#: templates/js/translated/company.js:829 templates/js/translated/part.js:1441
msgid "Link"
msgstr ""
-#: InvenTree/models.py:203 build/models.py:330 part/models.py:868
-#: stock/models.py:674
+#: InvenTree/models.py:201 build/models.py:330 part/models.py:856
+#: stock/models.py:665
msgid "Link to external URL"
msgstr ""
-#: InvenTree/models.py:206 templates/js/translated/attachment.js:163
+#: InvenTree/models.py:204 templates/js/translated/attachment.js:163
msgid "Comment"
msgstr "Kommentar"
-#: InvenTree/models.py:206
+#: InvenTree/models.py:204
msgid "File comment"
msgstr "Fil kommentar"
-#: InvenTree/models.py:212 InvenTree/models.py:213 common/models.py:1571
-#: common/models.py:1572 common/models.py:1806 common/models.py:1807
-#: common/models.py:2034 common/models.py:2035 part/models.py:2369
-#: part/models.py:2389 plugin/models.py:261 plugin/models.py:262
+#: InvenTree/models.py:210 InvenTree/models.py:211 common/models.py:1567
+#: common/models.py:1568 common/models.py:1802 common/models.py:1803
+#: common/models.py:2030 common/models.py:2031 part/models.py:2357
+#: part/models.py:2377 plugin/models.py:260 plugin/models.py:261
#: report/templates/report/inventree_test_report_base.html:96
#: templates/js/translated/stock.js:2518
msgid "User"
msgstr "Användare"
-#: InvenTree/models.py:216
+#: InvenTree/models.py:214
msgid "upload date"
msgstr "uppladdningsdatum"
-#: InvenTree/models.py:239
+#: InvenTree/models.py:237
msgid "Filename must not be empty"
msgstr "Filnamnet får inte vara tomt"
-#: InvenTree/models.py:262
+#: InvenTree/models.py:260
msgid "Invalid attachment directory"
msgstr "Ogiltig katalog för bilaga"
-#: InvenTree/models.py:272
+#: InvenTree/models.py:270
#, python-brace-format
msgid "Filename contains illegal character '{c}'"
msgstr "Filnamnet innehåller ogiltiga tecken '{c}'"
-#: InvenTree/models.py:275
+#: InvenTree/models.py:273
msgid "Filename missing extension"
msgstr "Filnamn saknar ändelse"
-#: InvenTree/models.py:282
+#: InvenTree/models.py:280
msgid "Attachment with this filename already exists"
msgstr "Det finns redan en bilaga med detta filnamn"
-#: InvenTree/models.py:289
+#: InvenTree/models.py:287
msgid "Error renaming file"
msgstr "Fel vid namnbyte av fil"
-#: InvenTree/models.py:324
+#: InvenTree/models.py:322
msgid "Invalid choice"
msgstr "Ogiltigt val"
-#: InvenTree/models.py:340 InvenTree/models.py:341 common/models.py:1792
-#: company/models.py:426 label/models.py:109 part/models.py:811
-#: part/models.py:2553 plugin/models.py:100 report/models.py:174
+#: InvenTree/models.py:338 InvenTree/models.py:339 common/models.py:1788
+#: company/models.py:420 label/models.py:104 part/models.py:799
+#: part/models.py:2541 plugin/models.py:99 report/models.py:169
#: templates/InvenTree/notifications/notifications.html:84
#: templates/InvenTree/settings/mixins/urls.html:13
#: templates/InvenTree/settings/plugin.html:49
@@ -211,23 +211,23 @@ msgstr "Ogiltigt val"
msgid "Name"
msgstr "Namn"
-#: InvenTree/models.py:347 build/models.py:207
-#: build/templates/build/detail.html:24 company/models.py:349
-#: company/models.py:581 company/templates/company/company_base.html:71
+#: InvenTree/models.py:345 build/models.py:207
+#: build/templates/build/detail.html:24 company/models.py:343
+#: company/models.py:575 company/templates/company/company_base.html:71
#: company/templates/company/manufacturer_part.html:75
-#: company/templates/company/supplier_part.html:73 label/models.py:116
-#: order/models.py:134 part/models.py:834 part/templates/part/category.html:74
+#: company/templates/company/supplier_part.html:73 label/models.py:111
+#: order/models.py:130 part/models.py:822 part/templates/part/category.html:74
#: part/templates/part/part_base.html:167
-#: part/templates/part/set_category.html:14 report/models.py:187
-#: report/models.py:552 report/models.py:591
+#: part/templates/part/set_category.html:14 report/models.py:182
+#: report/models.py:547 report/models.py:586
#: report/templates/report/inventree_build_order_base.html:118
#: stock/templates/stock/location.html:103
#: templates/InvenTree/settings/plugin_settings.html:33
#: templates/js/translated/bom.js:553 templates/js/translated/bom.js:872
#: templates/js/translated/build.js:2408 templates/js/translated/company.js:345
#: templates/js/translated/company.js:551
-#: templates/js/translated/company.js:840 templates/js/translated/order.js:1456
-#: templates/js/translated/order.js:1664 templates/js/translated/order.js:2148
+#: templates/js/translated/company.js:840 templates/js/translated/order.js:1562
+#: templates/js/translated/order.js:1770 templates/js/translated/order.js:2254
#: templates/js/translated/part.js:674 templates/js/translated/part.js:1082
#: templates/js/translated/part.js:1355 templates/js/translated/part.js:1755
#: templates/js/translated/part.js:1824 templates/js/translated/stock.js:1686
@@ -235,173 +235,173 @@ msgstr "Namn"
msgid "Description"
msgstr "Beskrivning"
-#: InvenTree/models.py:348
+#: InvenTree/models.py:346
msgid "Description (optional)"
msgstr "Beskrivning (valfritt)"
-#: InvenTree/models.py:356
+#: InvenTree/models.py:354
msgid "parent"
msgstr "överordnad"
-#: InvenTree/serializers.py:62 part/models.py:2886
+#: InvenTree/serializers.py:59 part/models.py:2874
msgid "Must be a valid number"
msgstr "Måste vara ett giltigt nummer"
-#: InvenTree/serializers.py:296
+#: InvenTree/serializers.py:293
msgid "Filename"
msgstr "Filnamn"
-#: InvenTree/serializers.py:331
+#: InvenTree/serializers.py:328
msgid "Invalid value"
msgstr ""
-#: InvenTree/serializers.py:352
+#: InvenTree/serializers.py:349
msgid "Data File"
msgstr ""
-#: InvenTree/serializers.py:353
+#: InvenTree/serializers.py:350
msgid "Select data file for upload"
msgstr ""
-#: InvenTree/serializers.py:377
+#: InvenTree/serializers.py:374
msgid "Unsupported file type"
msgstr ""
-#: InvenTree/serializers.py:383
+#: InvenTree/serializers.py:380
msgid "File is too large"
msgstr ""
-#: InvenTree/serializers.py:404
+#: InvenTree/serializers.py:401
msgid "No columns found in file"
msgstr ""
-#: InvenTree/serializers.py:407
+#: InvenTree/serializers.py:404
msgid "No data rows found in file"
msgstr ""
-#: InvenTree/serializers.py:533
+#: InvenTree/serializers.py:530
msgid "No data rows provided"
msgstr ""
-#: InvenTree/serializers.py:536
+#: InvenTree/serializers.py:533
msgid "No data columns supplied"
msgstr ""
-#: InvenTree/serializers.py:623
+#: InvenTree/serializers.py:620
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr ""
-#: InvenTree/serializers.py:632
+#: InvenTree/serializers.py:629
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr ""
-#: InvenTree/settings.py:672
+#: InvenTree/settings.py:669
msgid "Czech"
msgstr ""
-#: InvenTree/settings.py:673
+#: InvenTree/settings.py:670
msgid "German"
msgstr "Tyska"
-#: InvenTree/settings.py:674
+#: InvenTree/settings.py:671
msgid "Greek"
msgstr "Grekiska"
-#: InvenTree/settings.py:675
+#: InvenTree/settings.py:672
msgid "English"
msgstr "Engelska"
-#: InvenTree/settings.py:676
+#: InvenTree/settings.py:673
msgid "Spanish"
msgstr "Spanska"
-#: InvenTree/settings.py:677
+#: InvenTree/settings.py:674
msgid "Spanish (Mexican)"
msgstr ""
-#: InvenTree/settings.py:678
+#: InvenTree/settings.py:675
msgid "Farsi / Persian"
msgstr ""
-#: InvenTree/settings.py:679
+#: InvenTree/settings.py:676
msgid "French"
msgstr "Franska"
-#: InvenTree/settings.py:680
+#: InvenTree/settings.py:677
msgid "Hebrew"
msgstr "Hebreiska"
-#: InvenTree/settings.py:681
+#: InvenTree/settings.py:678
msgid "Hungarian"
msgstr ""
-#: InvenTree/settings.py:682
+#: InvenTree/settings.py:679
msgid "Italian"
msgstr "Italienska"
-#: InvenTree/settings.py:683
+#: InvenTree/settings.py:680
msgid "Japanese"
msgstr "Japanska"
-#: InvenTree/settings.py:684
+#: InvenTree/settings.py:681
msgid "Korean"
msgstr "Koreanska"
-#: InvenTree/settings.py:685
+#: InvenTree/settings.py:682
msgid "Dutch"
msgstr "Nederländska"
-#: InvenTree/settings.py:686
+#: InvenTree/settings.py:683
msgid "Norwegian"
msgstr "Norska"
-#: InvenTree/settings.py:687
+#: InvenTree/settings.py:684
msgid "Polish"
msgstr "Polska"
-#: InvenTree/settings.py:688
+#: InvenTree/settings.py:685
msgid "Portuguese"
msgstr ""
-#: InvenTree/settings.py:689
+#: InvenTree/settings.py:686
msgid "Portuguese (Brazilian)"
msgstr ""
-#: InvenTree/settings.py:690
+#: InvenTree/settings.py:687
msgid "Russian"
msgstr "Ryska"
-#: InvenTree/settings.py:691
+#: InvenTree/settings.py:688
msgid "Swedish"
msgstr "Svenska"
-#: InvenTree/settings.py:692
+#: InvenTree/settings.py:689
msgid "Thai"
msgstr "Thailändska"
-#: InvenTree/settings.py:693
+#: InvenTree/settings.py:690
msgid "Turkish"
msgstr "Turkiska"
-#: InvenTree/settings.py:694
+#: InvenTree/settings.py:691
msgid "Vietnamese"
msgstr "Vietnamesiska"
-#: InvenTree/settings.py:695
+#: InvenTree/settings.py:692
msgid "Chinese"
msgstr "Kinesiska"
-#: InvenTree/status.py:110
+#: InvenTree/status.py:108
msgid "Background worker check failed"
msgstr "Kontroll av bakgrundsarbetare misslyckades"
-#: InvenTree/status.py:114
+#: InvenTree/status.py:112
msgid "Email backend not configured"
msgstr "Backend för e-post är inte konfigurerad"
-#: InvenTree/status.py:117
+#: InvenTree/status.py:115
msgid "InvenTree system health checks failed"
msgstr "InvenTree systemhälsokontroll misslyckades"
@@ -416,7 +416,7 @@ msgstr "Placerad"
#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:326
#: order/templates/order/order_base.html:134
-#: order/templates/order/sales_order_base.html:132
+#: order/templates/order/sales_order_base.html:133
msgid "Complete"
msgstr "Slutför"
@@ -435,8 +435,8 @@ msgstr "Förlorad"
msgid "Returned"
msgstr "Återlämnad"
-#: InvenTree/status_codes.py:143 order/models.py:1087
-#: templates/js/translated/order.js:2871 templates/js/translated/order.js:3188
+#: InvenTree/status_codes.py:143 order/models.py:1083
+#: templates/js/translated/order.js:3026 templates/js/translated/order.js:3343
msgid "Shipped"
msgstr "Skickad"
@@ -552,63 +552,63 @@ msgstr ""
msgid "Production"
msgstr ""
-#: InvenTree/validators.py:25
+#: InvenTree/validators.py:23
msgid "Not a valid currency code"
msgstr ""
-#: InvenTree/validators.py:53
+#: InvenTree/validators.py:51
msgid "Invalid character in part name"
msgstr ""
-#: InvenTree/validators.py:66
+#: InvenTree/validators.py:64
#, python-brace-format
msgid "IPN must match regex pattern {pat}"
msgstr ""
-#: InvenTree/validators.py:80 InvenTree/validators.py:94
-#: InvenTree/validators.py:108
+#: InvenTree/validators.py:78 InvenTree/validators.py:92
+#: InvenTree/validators.py:106
#, python-brace-format
msgid "Reference must match pattern {pattern}"
msgstr ""
-#: InvenTree/validators.py:116
+#: InvenTree/validators.py:114
#, python-brace-format
msgid "Illegal character in name ({x})"
msgstr ""
-#: InvenTree/validators.py:137 InvenTree/validators.py:153
+#: InvenTree/validators.py:135 InvenTree/validators.py:151
msgid "Overage value must not be negative"
msgstr ""
-#: InvenTree/validators.py:155
+#: InvenTree/validators.py:153
msgid "Overage must not exceed 100%"
msgstr ""
-#: InvenTree/validators.py:162
+#: InvenTree/validators.py:160
msgid "Invalid value for overage"
msgstr ""
-#: InvenTree/views.py:535
+#: InvenTree/views.py:534
msgid "Delete Item"
msgstr ""
-#: InvenTree/views.py:584
+#: InvenTree/views.py:583
msgid "Check box to confirm item deletion"
msgstr ""
-#: InvenTree/views.py:599 templates/InvenTree/settings/user.html:22
+#: InvenTree/views.py:598 templates/InvenTree/settings/user.html:22
msgid "Edit User Information"
msgstr ""
-#: InvenTree/views.py:610 templates/InvenTree/settings/user.html:19
+#: InvenTree/views.py:609 templates/InvenTree/settings/user.html:19
msgid "Set Password"
msgstr ""
-#: InvenTree/views.py:629
+#: InvenTree/views.py:628
msgid "Password fields must match"
msgstr ""
-#: InvenTree/views.py:876 templates/navbar.html:152
+#: InvenTree/views.py:875 templates/navbar.html:152
msgid "System Information"
msgstr ""
@@ -629,7 +629,7 @@ msgstr ""
#: order/templates/order/so_sidebar.html:13
#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221
#: templates/InvenTree/search.html:139
-#: templates/InvenTree/settings/sidebar.html:45 users/models.py:44
+#: templates/InvenTree/settings/sidebar.html:45 users/models.py:42
msgid "Build Orders"
msgstr ""
@@ -637,15 +637,15 @@ msgstr ""
msgid "Build Order Reference"
msgstr ""
-#: build/models.py:199 order/models.py:241 order/models.py:593
-#: order/models.py:888 part/models.py:2797
+#: build/models.py:199 order/models.py:237 order/models.py:589
+#: order/models.py:884 part/models.py:2785
#: part/templates/part/upload_bom.html:54
#: report/templates/report/inventree_po_report.html:91
#: report/templates/report/inventree_so_report.html:92
#: templates/js/translated/bom.js:688 templates/js/translated/bom.js:879
-#: templates/js/translated/build.js:1794 templates/js/translated/order.js:1695
-#: templates/js/translated/order.js:1896 templates/js/translated/order.js:3055
-#: templates/js/translated/order.js:3538
+#: templates/js/translated/build.js:1794 templates/js/translated/order.js:1801
+#: templates/js/translated/order.js:2002 templates/js/translated/order.js:3210
+#: templates/js/translated/order.js:3695
msgid "Reference"
msgstr ""
@@ -663,12 +663,12 @@ msgid "BuildOrder to which this build is allocated"
msgstr ""
#: build/models.py:225 build/templates/build/build_base.html:77
-#: build/templates/build/detail.html:29 company/models.py:717
-#: order/models.py:987 order/models.py:1076 part/models.py:366
-#: part/models.py:2315 part/models.py:2331 part/models.py:2350
-#: part/models.py:2367 part/models.py:2469 part/models.py:2591
-#: part/models.py:2681 part/models.py:2772 part/models.py:3062
-#: part/serializers.py:922 part/templates/part/part_app_base.html:8
+#: build/templates/build/detail.html:29 company/models.py:711
+#: order/models.py:983 order/models.py:1072 part/models.py:354
+#: part/models.py:2303 part/models.py:2319 part/models.py:2338
+#: part/models.py:2355 part/models.py:2457 part/models.py:2579
+#: part/models.py:2669 part/models.py:2760 part/models.py:3050
+#: part/serializers.py:917 part/templates/part/part_app_base.html:8
#: part/templates/part/part_pricing.html:12
#: part/templates/part/set_category.html:13
#: part/templates/part/upload_bom.html:52
@@ -683,10 +683,10 @@ msgstr ""
#: templates/js/translated/build.js:1158 templates/js/translated/build.js:1664
#: templates/js/translated/build.js:2100 templates/js/translated/build.js:2413
#: templates/js/translated/company.js:492
-#: templates/js/translated/company.js:749 templates/js/translated/order.js:93
-#: templates/js/translated/order.js:762 templates/js/translated/order.js:1194
-#: templates/js/translated/order.js:1649 templates/js/translated/order.js:2475
-#: templates/js/translated/order.js:2824 templates/js/translated/order.js:3039
+#: templates/js/translated/company.js:749 templates/js/translated/order.js:94
+#: templates/js/translated/order.js:868 templates/js/translated/order.js:1300
+#: templates/js/translated/order.js:1755 templates/js/translated/order.js:2581
+#: templates/js/translated/order.js:2979 templates/js/translated/order.js:3194
#: templates/js/translated/part.js:1067 templates/js/translated/part.js:1137
#: templates/js/translated/part.js:1333 templates/js/translated/stock.js:531
#: templates/js/translated/stock.js:696 templates/js/translated/stock.js:903
@@ -708,7 +708,7 @@ msgid "SalesOrder to which this build is allocated"
msgstr ""
#: build/models.py:247 build/serializers.py:790
-#: templates/js/translated/build.js:2088 templates/js/translated/order.js:2463
+#: templates/js/translated/build.js:2088 templates/js/translated/order.js:2569
msgid "Source Location"
msgstr ""
@@ -748,8 +748,8 @@ msgstr ""
msgid "Build status code"
msgstr ""
-#: build/models.py:285 build/serializers.py:220 order/serializers.py:445
-#: stock/models.py:678 templates/js/translated/order.js:1054
+#: build/models.py:285 build/serializers.py:220 order/serializers.py:440
+#: stock/models.py:669 templates/js/translated/order.js:1160
msgid "Batch Code"
msgstr ""
@@ -757,12 +757,12 @@ msgstr ""
msgid "Batch code for this build output"
msgstr ""
-#: build/models.py:292 order/models.py:138 part/models.py:1006
-#: part/templates/part/part_base.html:305 templates/js/translated/order.js:2161
+#: build/models.py:292 order/models.py:134 part/models.py:994
+#: part/templates/part/part_base.html:305 templates/js/translated/order.js:2267
msgid "Creation Date"
msgstr ""
-#: build/models.py:296 order/models.py:615
+#: build/models.py:296 order/models.py:611
msgid "Target completion date"
msgstr ""
@@ -770,7 +770,7 @@ msgstr ""
msgid "Target date for build completion. Build will be overdue after this date."
msgstr ""
-#: build/models.py:300 order/models.py:284
+#: build/models.py:300 order/models.py:280
#: templates/js/translated/build.js:2490
msgid "Completion Date"
msgstr ""
@@ -788,11 +788,11 @@ msgid "User who issued this build order"
msgstr ""
#: build/models.py:323 build/templates/build/build_base.html:190
-#: build/templates/build/detail.html:115 order/models.py:152
+#: build/templates/build/detail.html:115 order/models.py:148
#: order/templates/order/order_base.html:176
-#: order/templates/order/sales_order_base.html:182 part/models.py:1010
+#: order/templates/order/sales_order_base.html:183 part/models.py:998
#: report/templates/report/inventree_build_order_base.html:159
-#: templates/js/translated/build.js:2470 templates/js/translated/order.js:1490
+#: templates/js/translated/build.js:2470 templates/js/translated/order.js:1596
msgid "Responsible"
msgstr ""
@@ -803,27 +803,27 @@ msgstr ""
#: build/models.py:329 build/templates/build/detail.html:101
#: company/templates/company/manufacturer_part.html:107
#: company/templates/company/supplier_part.html:132
-#: part/templates/part/part_base.html:346 stock/models.py:672
+#: part/templates/part/part_base.html:346 stock/models.py:663
#: stock/templates/stock/item_base.html:363
msgid "External Link"
msgstr ""
#: build/models.py:334 build/serializers.py:390
-#: build/templates/build/sidebar.html:21 company/models.py:140
-#: company/models.py:588 company/templates/company/sidebar.html:25
-#: order/models.py:156 order/models.py:890 order/models.py:1197
+#: build/templates/build/sidebar.html:21 company/models.py:134
+#: company/models.py:582 company/templates/company/sidebar.html:25
+#: order/models.py:152 order/models.py:886 order/models.py:1193
#: order/templates/order/po_sidebar.html:11
-#: order/templates/order/so_sidebar.html:17 part/models.py:995
+#: order/templates/order/so_sidebar.html:17 part/models.py:983
#: part/templates/part/part_sidebar.html:59
#: report/templates/report/inventree_build_order_base.html:173
-#: stock/models.py:745 stock/models.py:2111 stock/models.py:2217
-#: stock/serializers.py:329 stock/serializers.py:467 stock/serializers.py:736
-#: stock/serializers.py:834 stock/serializers.py:966
+#: stock/models.py:736 stock/models.py:2102 stock/models.py:2208
+#: stock/serializers.py:321 stock/serializers.py:459 stock/serializers.py:728
+#: stock/serializers.py:826 stock/serializers.py:958
#: stock/templates/stock/stock_sidebar.html:25
#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1065
-#: templates/js/translated/company.js:845 templates/js/translated/order.js:1816
-#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2344
-#: templates/js/translated/order.js:3213 templates/js/translated/order.js:3609
+#: templates/js/translated/company.js:845 templates/js/translated/order.js:1922
+#: templates/js/translated/order.js:2073 templates/js/translated/order.js:2450
+#: templates/js/translated/order.js:3368 templates/js/translated/order.js:3766
#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1922
msgid "Notes"
msgstr ""
@@ -857,7 +857,7 @@ msgstr ""
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:1238 order/models.py:1324
+#: build/models.py:1238 order/models.py:1329
msgid "Allocation quantity must be greater than zero"
msgstr ""
@@ -879,16 +879,16 @@ msgstr ""
msgid "Build to allocate parts"
msgstr ""
-#: build/models.py:1392 build/serializers.py:631 order/serializers.py:958
-#: order/serializers.py:976 stock/serializers.py:401 stock/serializers.py:674
-#: stock/serializers.py:792 stock/templates/stock/item_base.html:10
+#: build/models.py:1392 build/serializers.py:631 order/serializers.py:961
+#: order/serializers.py:979 stock/serializers.py:393 stock/serializers.py:666
+#: stock/serializers.py:784 stock/templates/stock/item_base.html:10
#: stock/templates/stock/item_base.html:23
#: stock/templates/stock/item_base.html:357
#: templates/js/translated/build.js:738 templates/js/translated/build.js:743
#: templates/js/translated/build.js:2102 templates/js/translated/build.js:2538
-#: templates/js/translated/order.js:94 templates/js/translated/order.js:2476
-#: templates/js/translated/order.js:2731 templates/js/translated/order.js:2736
-#: templates/js/translated/order.js:2831 templates/js/translated/order.js:2921
+#: templates/js/translated/order.js:95 templates/js/translated/order.js:2582
+#: templates/js/translated/order.js:2886 templates/js/translated/order.js:2891
+#: templates/js/translated/order.js:2986 templates/js/translated/order.js:3076
#: templates/js/translated/stock.js:532 templates/js/translated/stock.js:697
#: templates/js/translated/stock.js:2454
msgid "Stock Item"
@@ -900,11 +900,11 @@ msgstr ""
#: build/models.py:1405 build/serializers.py:190
#: build/templates/build/build_base.html:82
-#: build/templates/build/detail.html:34 common/models.py:1614
-#: company/forms.py:39 company/templates/company/supplier_part.html:258
-#: order/models.py:881 order/models.py:1364 order/serializers.py:1097
-#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:123
-#: part/forms.py:139 part/forms.py:155 part/models.py:2788
+#: build/templates/build/detail.html:34 common/models.py:1610
+#: company/forms.py:38 company/templates/company/supplier_part.html:258
+#: order/models.py:877 order/models.py:1369 order/serializers.py:1100
+#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:121
+#: part/forms.py:137 part/forms.py:153 part/models.py:2776
#: part/templates/part/detail.html:953 part/templates/part/detail.html:1039
#: part/templates/part/part_pricing.html:16
#: part/templates/part/upload_bom.html:53
@@ -913,7 +913,7 @@ msgstr ""
#: report/templates/report/inventree_so_report.html:91
#: report/templates/report/inventree_test_report_base.html:81
#: report/templates/report/inventree_test_report_base.html:139
-#: stock/serializers.py:290 stock/templates/stock/item_base.html:187
+#: stock/serializers.py:282 stock/templates/stock/item_base.html:187
#: stock/templates/stock/item_base.html:252
#: stock/templates/stock/item_base.html:260
#: templates/js/translated/barcode.js:437 templates/js/translated/bom.js:689
@@ -922,11 +922,11 @@ msgstr ""
#: templates/js/translated/build.js:1180 templates/js/translated/build.js:1690
#: templates/js/translated/build.js:2103
#: templates/js/translated/model_renderers.js:108
-#: templates/js/translated/order.js:110 templates/js/translated/order.js:765
-#: templates/js/translated/order.js:1701 templates/js/translated/order.js:1902
-#: templates/js/translated/order.js:2477 templates/js/translated/order.js:2750
-#: templates/js/translated/order.js:2838 templates/js/translated/order.js:2927
-#: templates/js/translated/order.js:3061 templates/js/translated/order.js:3544
+#: templates/js/translated/order.js:111 templates/js/translated/order.js:871
+#: templates/js/translated/order.js:1807 templates/js/translated/order.js:2008
+#: templates/js/translated/order.js:2583 templates/js/translated/order.js:2905
+#: templates/js/translated/order.js:2993 templates/js/translated/order.js:3082
+#: templates/js/translated/order.js:3216 templates/js/translated/order.js:3701
#: templates/js/translated/part.js:967 templates/js/translated/part.js:1969
#: templates/js/translated/part.js:2200 templates/js/translated/part.js:2234
#: templates/js/translated/part.js:2312 templates/js/translated/stock.js:403
@@ -972,10 +972,10 @@ msgstr ""
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:203 build/serializers.py:651 order/models.py:309
-#: order/serializers.py:294 order/serializers.py:440 part/serializers.py:593
-#: part/serializers.py:1089 stock/models.py:505 stock/models.py:1316
-#: stock/serializers.py:302
+#: build/serializers.py:203 build/serializers.py:651 order/models.py:305
+#: order/serializers.py:289 order/serializers.py:435 part/serializers.py:588
+#: part/serializers.py:1084 stock/models.py:496 stock/models.py:1307
+#: stock/serializers.py:294
msgid "Quantity must be greater than zero"
msgstr ""
@@ -987,8 +987,8 @@ msgstr ""
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:227 order/serializers.py:453 order/serializers.py:1101
-#: stock/serializers.py:311 templates/js/translated/order.js:1065
+#: build/serializers.py:227 order/serializers.py:448 order/serializers.py:1104
+#: stock/serializers.py:303 templates/js/translated/order.js:1171
#: templates/js/translated/stock.js:238 templates/js/translated/stock.js:404
msgid "Serial Numbers"
msgstr ""
@@ -1005,7 +1005,7 @@ msgstr ""
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:276 stock/api.py:602
+#: build/serializers.py:276 stock/api.py:590
msgid "The following serial numbers already exist"
msgstr ""
@@ -1013,14 +1013,14 @@ msgstr ""
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:372 order/serializers.py:426 order/serializers.py:531
-#: stock/serializers.py:322 stock/serializers.py:462 stock/serializers.py:827
-#: stock/serializers.py:1068 stock/templates/stock/item_base.html:303
+#: build/serializers.py:372 order/serializers.py:421 order/serializers.py:526
+#: stock/serializers.py:314 stock/serializers.py:454 stock/serializers.py:819
+#: stock/serializers.py:1060 stock/templates/stock/item_base.html:303
#: templates/js/translated/barcode.js:436
#: templates/js/translated/barcode.js:618 templates/js/translated/build.js:750
-#: templates/js/translated/build.js:1702 templates/js/translated/order.js:1092
-#: templates/js/translated/order.js:2743 templates/js/translated/order.js:2846
-#: templates/js/translated/order.js:2854 templates/js/translated/order.js:2935
+#: templates/js/translated/build.js:1702 templates/js/translated/order.js:1198
+#: templates/js/translated/order.js:2898 templates/js/translated/order.js:3001
+#: templates/js/translated/order.js:3009 templates/js/translated/order.js:3090
#: templates/js/translated/part.js:180 templates/js/translated/stock.js:533
#: templates/js/translated/stock.js:698 templates/js/translated/stock.js:905
#: templates/js/translated/stock.js:1793 templates/js/translated/stock.js:2395
@@ -1032,11 +1032,11 @@ msgid "Location for completed build outputs"
msgstr ""
#: build/serializers.py:379 build/templates/build/build_base.html:142
-#: build/templates/build/detail.html:62 order/models.py:609
-#: order/serializers.py:463 stock/templates/stock/item_base.html:193
+#: build/templates/build/detail.html:62 order/models.py:605
+#: order/serializers.py:458 stock/templates/stock/item_base.html:193
#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2442
-#: templates/js/translated/order.js:1199 templates/js/translated/order.js:1460
-#: templates/js/translated/order.js:2153 templates/js/translated/stock.js:1768
+#: templates/js/translated/order.js:1305 templates/js/translated/order.js:1566
+#: templates/js/translated/order.js:2259 templates/js/translated/stock.js:1768
#: templates/js/translated/stock.js:2472 templates/js/translated/stock.js:2604
msgid "Status"
msgstr ""
@@ -1097,8 +1097,8 @@ msgstr ""
msgid "No build outputs have been created for this build order"
msgstr ""
-#: build/serializers.py:556 build/serializers.py:605 part/models.py:2912
-#: part/models.py:3054
+#: build/serializers.py:556 build/serializers.py:605 part/models.py:2900
+#: part/models.py:3042
msgid "BOM Item"
msgstr ""
@@ -1114,11 +1114,11 @@ msgstr ""
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:637 stock/serializers.py:681
+#: build/serializers.py:637 stock/serializers.py:673
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:694 order/serializers.py:1009
+#: build/serializers.py:694 order/serializers.py:1012
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
@@ -1135,7 +1135,7 @@ msgstr ""
msgid "This stock item has already been allocated to this build output"
msgstr ""
-#: build/serializers.py:739 order/serializers.py:1271
+#: build/serializers.py:739 order/serializers.py:1274
msgid "Allocation items must be provided"
msgstr ""
@@ -1233,13 +1233,13 @@ msgid "Stock has not been fully allocated to this Build Order"
msgstr ""
#: build/templates/build/build_base.html:151
-#: build/templates/build/detail.html:131 order/models.py:894
+#: build/templates/build/detail.html:131 order/models.py:890
#: order/templates/order/order_base.html:162
-#: order/templates/order/sales_order_base.html:163
+#: order/templates/order/sales_order_base.html:164
#: report/templates/report/inventree_build_order_base.html:126
-#: templates/js/translated/build.js:2482 templates/js/translated/order.js:1477
-#: templates/js/translated/order.js:1763 templates/js/translated/order.js:2169
-#: templates/js/translated/order.js:3124 templates/js/translated/part.js:971
+#: templates/js/translated/build.js:2482 templates/js/translated/order.js:1583
+#: templates/js/translated/order.js:1869 templates/js/translated/order.js:2275
+#: templates/js/translated/order.js:3279 templates/js/translated/part.js:971
msgid "Target Date"
msgstr ""
@@ -1251,7 +1251,7 @@ msgstr ""
#: build/templates/build/build_base.html:156
#: build/templates/build/build_base.html:201
#: order/templates/order/order_base.html:98
-#: order/templates/order/sales_order_base.html:93
+#: order/templates/order/sales_order_base.html:94
#: templates/js/translated/table_filters.js:312
#: templates/js/translated/table_filters.js:353
#: templates/js/translated/table_filters.js:383
@@ -1260,20 +1260,20 @@ msgstr ""
#: build/templates/build/build_base.html:163
#: build/templates/build/detail.html:67 build/templates/build/detail.html:142
-#: order/templates/order/sales_order_base.html:170
+#: order/templates/order/sales_order_base.html:171
#: templates/js/translated/table_filters.js:392
msgid "Completed"
msgstr ""
#: build/templates/build/build_base.html:176
-#: build/templates/build/detail.html:94 order/models.py:1073
-#: order/models.py:1169 order/models.py:1268
+#: build/templates/build/detail.html:94 order/models.py:1069
+#: order/models.py:1165 order/models.py:1273
#: order/templates/order/sales_order_base.html:9
#: order/templates/order/sales_order_base.html:28
#: report/templates/report/inventree_build_order_base.html:136
#: report/templates/report/inventree_so_report.html:77
#: stock/templates/stock/item_base.html:297
-#: templates/js/translated/order.js:2108
+#: templates/js/translated/order.js:2214
msgid "Sales Order"
msgstr ""
@@ -1308,8 +1308,8 @@ msgstr ""
msgid "Stock can be taken from any available location."
msgstr ""
-#: build/templates/build/detail.html:49 order/models.py:1009
-#: templates/js/translated/order.js:1200 templates/js/translated/order.js:1805
+#: build/templates/build/detail.html:49 order/models.py:1005
+#: templates/js/translated/order.js:1306 templates/js/translated/order.js:1911
msgid "Destination"
msgstr ""
@@ -1334,7 +1334,7 @@ msgstr ""
#: build/templates/build/detail.html:126
#: order/templates/order/order_base.html:149
-#: order/templates/order/sales_order_base.html:157
+#: order/templates/order/sales_order_base.html:158
#: templates/js/translated/build.js:2450
msgid "Created"
msgstr ""
@@ -1386,7 +1386,7 @@ msgstr ""
#: build/templates/build/detail.html:187
#: company/templates/company/detail.html:37
#: company/templates/company/detail.html:84
-#: part/templates/part/category.html:177 templates/js/translated/order.js:805
+#: part/templates/part/category.html:177 templates/js/translated/order.js:911
msgid "Order Parts"
msgstr ""
@@ -1516,23 +1516,23 @@ msgstr ""
msgid "Delete Build Order"
msgstr ""
-#: common/files.py:65
+#: common/files.py:66
msgid "Unsupported file format: {ext.upper()}"
msgstr ""
-#: common/files.py:67
+#: common/files.py:68
msgid "Error reading file (invalid encoding)"
msgstr ""
-#: common/files.py:72
+#: common/files.py:73
msgid "Error reading file (invalid format)"
msgstr ""
-#: common/files.py:74
+#: common/files.py:75
msgid "Error reading file (incorrect dimension)"
msgstr ""
-#: common/files.py:76
+#: common/files.py:77
msgid "Error reading file (data could be corrupted)"
msgstr ""
@@ -1553,888 +1553,888 @@ msgstr ""
msgid "Select {name} file to upload"
msgstr ""
-#: common/models.py:398
+#: common/models.py:394
msgid "Settings key (must be unique - case insensitive)"
msgstr ""
-#: common/models.py:400
+#: common/models.py:396
msgid "Settings value"
msgstr ""
-#: common/models.py:441
+#: common/models.py:437
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:461
+#: common/models.py:457
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:472
+#: common/models.py:468
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:521
+#: common/models.py:517
msgid "Key string must be unique"
msgstr ""
-#: common/models.py:743
+#: common/models.py:739
msgid "No group"
msgstr ""
-#: common/models.py:785
+#: common/models.py:781
msgid "Restart required"
msgstr ""
-#: common/models.py:786
+#: common/models.py:782
msgid "A setting has been changed which requires a server restart"
msgstr ""
-#: common/models.py:793
+#: common/models.py:789
msgid "Server Instance Name"
msgstr ""
-#: common/models.py:795
+#: common/models.py:791
msgid "String descriptor for the server instance"
msgstr ""
-#: common/models.py:799
+#: common/models.py:795
msgid "Use instance name"
msgstr ""
-#: common/models.py:800
+#: common/models.py:796
msgid "Use the instance name in the title-bar"
msgstr ""
-#: common/models.py:806
+#: common/models.py:802
msgid "Restrict showing `about`"
msgstr ""
-#: common/models.py:807
+#: common/models.py:803
msgid "Show the `about` modal only to superusers"
msgstr ""
-#: common/models.py:813 company/models.py:98 company/models.py:99
+#: common/models.py:809 company/models.py:92 company/models.py:93
msgid "Company name"
msgstr ""
-#: common/models.py:814
+#: common/models.py:810
msgid "Internal company name"
msgstr ""
-#: common/models.py:819
+#: common/models.py:815
msgid "Base URL"
msgstr ""
-#: common/models.py:820
+#: common/models.py:816
msgid "Base URL for server instance"
msgstr ""
-#: common/models.py:826
+#: common/models.py:822
msgid "Default Currency"
msgstr ""
-#: common/models.py:827
+#: common/models.py:823
msgid "Default currency"
msgstr ""
-#: common/models.py:833
+#: common/models.py:829
msgid "Download from URL"
msgstr ""
-#: common/models.py:834
+#: common/models.py:830
msgid "Allow download of remote images and files from external URL"
msgstr ""
-#: common/models.py:840 templates/InvenTree/settings/sidebar.html:33
+#: common/models.py:836 templates/InvenTree/settings/sidebar.html:33
msgid "Barcode Support"
msgstr ""
-#: common/models.py:841
+#: common/models.py:837
msgid "Enable barcode scanner support"
msgstr ""
-#: common/models.py:847
+#: common/models.py:843
msgid "Barcode Webcam Support"
msgstr ""
-#: common/models.py:848
+#: common/models.py:844
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/models.py:854
+#: common/models.py:850
msgid "IPN Regex"
msgstr ""
-#: common/models.py:855
+#: common/models.py:851
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/models.py:859
+#: common/models.py:855
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/models.py:860
+#: common/models.py:856
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/models.py:866
+#: common/models.py:862
msgid "Allow Editing IPN"
msgstr ""
-#: common/models.py:867
+#: common/models.py:863
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/models.py:873
+#: common/models.py:869
msgid "Copy Part BOM Data"
msgstr ""
-#: common/models.py:874
+#: common/models.py:870
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/models.py:880
+#: common/models.py:876
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/models.py:881
+#: common/models.py:877
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/models.py:887
+#: common/models.py:883
msgid "Copy Part Test Data"
msgstr ""
-#: common/models.py:888
+#: common/models.py:884
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/models.py:894
+#: common/models.py:890
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/models.py:895
+#: common/models.py:891
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/models.py:901 part/models.py:2593 report/models.py:180
+#: common/models.py:897 part/models.py:2581 report/models.py:175
#: templates/js/translated/table_filters.js:38
#: templates/js/translated/table_filters.js:444
msgid "Template"
msgstr ""
-#: common/models.py:902
+#: common/models.py:898
msgid "Parts are templates by default"
msgstr ""
-#: common/models.py:908 part/models.py:958 templates/js/translated/bom.js:1411
+#: common/models.py:904 part/models.py:946 templates/js/translated/bom.js:1411
#: templates/js/translated/table_filters.js:168
#: templates/js/translated/table_filters.js:460
msgid "Assembly"
msgstr ""
-#: common/models.py:909
+#: common/models.py:905
msgid "Parts can be assembled from other components by default"
msgstr ""
-#: common/models.py:915 part/models.py:964
+#: common/models.py:911 part/models.py:952
#: templates/js/translated/table_filters.js:464
msgid "Component"
msgstr ""
-#: common/models.py:916
+#: common/models.py:912
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/models.py:922 part/models.py:975
+#: common/models.py:918 part/models.py:963
msgid "Purchaseable"
msgstr ""
-#: common/models.py:923
+#: common/models.py:919
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/models.py:929 part/models.py:980
+#: common/models.py:925 part/models.py:968
#: templates/js/translated/table_filters.js:472
msgid "Salable"
msgstr ""
-#: common/models.py:930
+#: common/models.py:926
msgid "Parts are salable by default"
msgstr ""
-#: common/models.py:936 part/models.py:970
+#: common/models.py:932 part/models.py:958
#: templates/js/translated/table_filters.js:46
#: templates/js/translated/table_filters.js:100
#: templates/js/translated/table_filters.js:476
msgid "Trackable"
msgstr ""
-#: common/models.py:937
+#: common/models.py:933
msgid "Parts are trackable by default"
msgstr ""
-#: common/models.py:943 part/models.py:990
+#: common/models.py:939 part/models.py:978
#: part/templates/part/part_base.html:151
#: templates/js/translated/table_filters.js:42
msgid "Virtual"
msgstr ""
-#: common/models.py:944
+#: common/models.py:940
msgid "Parts are virtual by default"
msgstr ""
-#: common/models.py:950
+#: common/models.py:946
msgid "Show Import in Views"
msgstr ""
-#: common/models.py:951
+#: common/models.py:947
msgid "Display the import wizard in some part views"
msgstr ""
-#: common/models.py:957
+#: common/models.py:953
msgid "Show Price in Forms"
msgstr ""
-#: common/models.py:958
+#: common/models.py:954
msgid "Display part price in some forms"
msgstr ""
-#: common/models.py:969
+#: common/models.py:965
msgid "Show Price in BOM"
msgstr ""
-#: common/models.py:970
+#: common/models.py:966
msgid "Include pricing information in BOM tables"
msgstr ""
-#: common/models.py:981
+#: common/models.py:977
msgid "Show Price History"
msgstr ""
-#: common/models.py:982
+#: common/models.py:978
msgid "Display historical pricing for Part"
msgstr ""
-#: common/models.py:988
+#: common/models.py:984
msgid "Show related parts"
msgstr ""
-#: common/models.py:989
+#: common/models.py:985
msgid "Display related parts for a part"
msgstr ""
-#: common/models.py:995
+#: common/models.py:991
msgid "Create initial stock"
msgstr ""
-#: common/models.py:996
+#: common/models.py:992
msgid "Create initial stock on part creation"
msgstr ""
-#: common/models.py:1002
+#: common/models.py:998
msgid "Internal Prices"
msgstr ""
-#: common/models.py:1003
+#: common/models.py:999
msgid "Enable internal prices for parts"
msgstr ""
-#: common/models.py:1009
+#: common/models.py:1005
msgid "Internal Price as BOM-Price"
msgstr ""
-#: common/models.py:1010
+#: common/models.py:1006
msgid "Use the internal price (if set) in BOM-price calculations"
msgstr ""
-#: common/models.py:1016
+#: common/models.py:1012
msgid "Part Name Display Format"
msgstr ""
-#: common/models.py:1017
+#: common/models.py:1013
msgid "Format to display the part name"
msgstr ""
-#: common/models.py:1024
+#: common/models.py:1020
msgid "Enable Reports"
msgstr ""
-#: common/models.py:1025
+#: common/models.py:1021
msgid "Enable generation of reports"
msgstr ""
-#: common/models.py:1031 templates/stats.html:25
+#: common/models.py:1027 templates/stats.html:25
msgid "Debug Mode"
msgstr ""
-#: common/models.py:1032
+#: common/models.py:1028
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/models.py:1038
+#: common/models.py:1034
msgid "Page Size"
msgstr ""
-#: common/models.py:1039
+#: common/models.py:1035
msgid "Default page size for PDF reports"
msgstr ""
-#: common/models.py:1049
+#: common/models.py:1045
msgid "Test Reports"
msgstr ""
-#: common/models.py:1050
+#: common/models.py:1046
msgid "Enable generation of test reports"
msgstr ""
-#: common/models.py:1056
+#: common/models.py:1052
msgid "Batch Code Template"
msgstr ""
-#: common/models.py:1057
+#: common/models.py:1053
msgid "Template for generating default batch codes for stock items"
msgstr ""
-#: common/models.py:1062
+#: common/models.py:1058
msgid "Stock Expiry"
msgstr ""
-#: common/models.py:1063
+#: common/models.py:1059
msgid "Enable stock expiry functionality"
msgstr ""
-#: common/models.py:1069
+#: common/models.py:1065
msgid "Sell Expired Stock"
msgstr ""
-#: common/models.py:1070
+#: common/models.py:1066
msgid "Allow sale of expired stock"
msgstr ""
-#: common/models.py:1076
+#: common/models.py:1072
msgid "Stock Stale Time"
msgstr ""
-#: common/models.py:1077
+#: common/models.py:1073
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/models.py:1079
+#: common/models.py:1075
msgid "days"
msgstr ""
-#: common/models.py:1084
+#: common/models.py:1080
msgid "Build Expired Stock"
msgstr ""
-#: common/models.py:1085
+#: common/models.py:1081
msgid "Allow building with expired stock"
msgstr ""
-#: common/models.py:1091
+#: common/models.py:1087
msgid "Stock Ownership Control"
msgstr ""
-#: common/models.py:1092
+#: common/models.py:1088
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/models.py:1098
+#: common/models.py:1094
msgid "Build Order Reference Prefix"
msgstr ""
-#: common/models.py:1099
+#: common/models.py:1095
msgid "Prefix value for build order reference"
msgstr ""
-#: common/models.py:1104
+#: common/models.py:1100
msgid "Build Order Reference Regex"
msgstr ""
-#: common/models.py:1105
+#: common/models.py:1101
msgid "Regular expression pattern for matching build order reference"
msgstr ""
-#: common/models.py:1109
+#: common/models.py:1105
msgid "Sales Order Reference Prefix"
msgstr ""
-#: common/models.py:1110
+#: common/models.py:1106
msgid "Prefix value for sales order reference"
msgstr ""
-#: common/models.py:1115
+#: common/models.py:1111
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/models.py:1116
+#: common/models.py:1112
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/models.py:1122
+#: common/models.py:1118
msgid "Purchase Order Reference Prefix"
msgstr ""
-#: common/models.py:1123
+#: common/models.py:1119
msgid "Prefix value for purchase order reference"
msgstr ""
-#: common/models.py:1129
+#: common/models.py:1125
msgid "Enable password forgot"
msgstr ""
-#: common/models.py:1130
+#: common/models.py:1126
msgid "Enable password forgot function on the login pages"
msgstr ""
-#: common/models.py:1136
+#: common/models.py:1132
msgid "Enable registration"
msgstr ""
-#: common/models.py:1137
+#: common/models.py:1133
msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/models.py:1143
+#: common/models.py:1139
msgid "Enable SSO"
msgstr ""
-#: common/models.py:1144
+#: common/models.py:1140
msgid "Enable SSO on the login pages"
msgstr ""
-#: common/models.py:1150
+#: common/models.py:1146
msgid "Email required"
msgstr ""
-#: common/models.py:1151
+#: common/models.py:1147
msgid "Require user to supply mail on signup"
msgstr ""
-#: common/models.py:1157
+#: common/models.py:1153
msgid "Auto-fill SSO users"
msgstr ""
-#: common/models.py:1158
+#: common/models.py:1154
msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
-#: common/models.py:1164
+#: common/models.py:1160
msgid "Mail twice"
msgstr ""
-#: common/models.py:1165
+#: common/models.py:1161
msgid "On signup ask users twice for their mail"
msgstr ""
-#: common/models.py:1171
+#: common/models.py:1167
msgid "Password twice"
msgstr ""
-#: common/models.py:1172
+#: common/models.py:1168
msgid "On signup ask users twice for their password"
msgstr ""
-#: common/models.py:1178
+#: common/models.py:1174
msgid "Group on signup"
msgstr ""
-#: common/models.py:1179
+#: common/models.py:1175
msgid "Group to which new users are assigned on registration"
msgstr ""
-#: common/models.py:1185
+#: common/models.py:1181
msgid "Enforce MFA"
msgstr ""
-#: common/models.py:1186
+#: common/models.py:1182
msgid "Users must use multifactor security."
msgstr ""
-#: common/models.py:1192
+#: common/models.py:1188
msgid "Check plugins on startup"
msgstr ""
-#: common/models.py:1193
+#: common/models.py:1189
msgid "Check that all plugins are installed on startup - enable in container enviroments"
msgstr ""
-#: common/models.py:1201
+#: common/models.py:1197
msgid "Enable URL integration"
msgstr ""
-#: common/models.py:1202
+#: common/models.py:1198
msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/models.py:1209
+#: common/models.py:1205
msgid "Enable navigation integration"
msgstr ""
-#: common/models.py:1210
+#: common/models.py:1206
msgid "Enable plugins to integrate into navigation"
msgstr ""
-#: common/models.py:1217
+#: common/models.py:1213
msgid "Enable app integration"
msgstr ""
-#: common/models.py:1218
+#: common/models.py:1214
msgid "Enable plugins to add apps"
msgstr ""
-#: common/models.py:1225
+#: common/models.py:1221
msgid "Enable schedule integration"
msgstr ""
-#: common/models.py:1226
+#: common/models.py:1222
msgid "Enable plugins to run scheduled tasks"
msgstr ""
-#: common/models.py:1233
+#: common/models.py:1229
msgid "Enable event integration"
msgstr ""
-#: common/models.py:1234
+#: common/models.py:1230
msgid "Enable plugins to respond to internal events"
msgstr ""
-#: common/models.py:1249 common/models.py:1564
+#: common/models.py:1245 common/models.py:1560
msgid "Settings key (must be unique - case insensitive"
msgstr ""
-#: common/models.py:1280
+#: common/models.py:1276
msgid "Show subscribed parts"
msgstr ""
-#: common/models.py:1281
+#: common/models.py:1277
msgid "Show subscribed parts on the homepage"
msgstr ""
-#: common/models.py:1287
+#: common/models.py:1283
msgid "Show subscribed categories"
msgstr ""
-#: common/models.py:1288
+#: common/models.py:1284
msgid "Show subscribed part categories on the homepage"
msgstr ""
-#: common/models.py:1294
+#: common/models.py:1290
msgid "Show latest parts"
msgstr ""
-#: common/models.py:1295
+#: common/models.py:1291
msgid "Show latest parts on the homepage"
msgstr ""
-#: common/models.py:1301
+#: common/models.py:1297
msgid "Recent Part Count"
msgstr ""
-#: common/models.py:1302
+#: common/models.py:1298
msgid "Number of recent parts to display on index page"
msgstr ""
-#: common/models.py:1308
+#: common/models.py:1304
msgid "Show unvalidated BOMs"
msgstr ""
-#: common/models.py:1309
+#: common/models.py:1305
msgid "Show BOMs that await validation on the homepage"
msgstr ""
-#: common/models.py:1315
+#: common/models.py:1311
msgid "Show recent stock changes"
msgstr ""
-#: common/models.py:1316
+#: common/models.py:1312
msgid "Show recently changed stock items on the homepage"
msgstr ""
-#: common/models.py:1322
+#: common/models.py:1318
msgid "Recent Stock Count"
msgstr ""
-#: common/models.py:1323
+#: common/models.py:1319
msgid "Number of recent stock items to display on index page"
msgstr ""
-#: common/models.py:1329
+#: common/models.py:1325
msgid "Show low stock"
msgstr ""
-#: common/models.py:1330
+#: common/models.py:1326
msgid "Show low stock items on the homepage"
msgstr ""
-#: common/models.py:1336
+#: common/models.py:1332
msgid "Show depleted stock"
msgstr ""
-#: common/models.py:1337
+#: common/models.py:1333
msgid "Show depleted stock items on the homepage"
msgstr ""
-#: common/models.py:1343
+#: common/models.py:1339
msgid "Show needed stock"
msgstr ""
-#: common/models.py:1344
+#: common/models.py:1340
msgid "Show stock items needed for builds on the homepage"
msgstr ""
-#: common/models.py:1350
+#: common/models.py:1346
msgid "Show expired stock"
msgstr ""
-#: common/models.py:1351
+#: common/models.py:1347
msgid "Show expired stock items on the homepage"
msgstr ""
-#: common/models.py:1357
+#: common/models.py:1353
msgid "Show stale stock"
msgstr ""
-#: common/models.py:1358
+#: common/models.py:1354
msgid "Show stale stock items on the homepage"
msgstr ""
-#: common/models.py:1364
+#: common/models.py:1360
msgid "Show pending builds"
msgstr ""
-#: common/models.py:1365
+#: common/models.py:1361
msgid "Show pending builds on the homepage"
msgstr ""
-#: common/models.py:1371
+#: common/models.py:1367
msgid "Show overdue builds"
msgstr ""
-#: common/models.py:1372
+#: common/models.py:1368
msgid "Show overdue builds on the homepage"
msgstr ""
-#: common/models.py:1378
+#: common/models.py:1374
msgid "Show outstanding POs"
msgstr ""
-#: common/models.py:1379
+#: common/models.py:1375
msgid "Show outstanding POs on the homepage"
msgstr ""
-#: common/models.py:1385
+#: common/models.py:1381
msgid "Show overdue POs"
msgstr ""
-#: common/models.py:1386
+#: common/models.py:1382
msgid "Show overdue POs on the homepage"
msgstr ""
-#: common/models.py:1392
+#: common/models.py:1388
msgid "Show outstanding SOs"
msgstr ""
-#: common/models.py:1393
+#: common/models.py:1389
msgid "Show outstanding SOs on the homepage"
msgstr ""
-#: common/models.py:1399
+#: common/models.py:1395
msgid "Show overdue SOs"
msgstr ""
-#: common/models.py:1400
+#: common/models.py:1396
msgid "Show overdue SOs on the homepage"
msgstr ""
-#: common/models.py:1405
+#: common/models.py:1401
msgid "Enable label printing"
msgstr ""
-#: common/models.py:1406
+#: common/models.py:1402
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/models.py:1412
+#: common/models.py:1408
msgid "Inline label display"
msgstr ""
-#: common/models.py:1413
+#: common/models.py:1409
msgid "Display PDF labels in the browser, instead of downloading as a file"
msgstr ""
-#: common/models.py:1419
+#: common/models.py:1415
msgid "Inline report display"
msgstr ""
-#: common/models.py:1420
+#: common/models.py:1416
msgid "Display PDF reports in the browser, instead of downloading as a file"
msgstr ""
-#: common/models.py:1426
+#: common/models.py:1422
msgid "Search Parts"
msgstr ""
-#: common/models.py:1427
+#: common/models.py:1423
msgid "Display parts in search preview window"
msgstr ""
-#: common/models.py:1433
+#: common/models.py:1429
msgid "Hide Inactive Parts"
msgstr ""
-#: common/models.py:1434
+#: common/models.py:1430
msgid "Excluded inactive parts from search preview window"
msgstr ""
-#: common/models.py:1440
+#: common/models.py:1436
msgid "Search Categories"
msgstr ""
-#: common/models.py:1441
+#: common/models.py:1437
msgid "Display part categories in search preview window"
msgstr ""
-#: common/models.py:1447
+#: common/models.py:1443
msgid "Search Stock"
msgstr ""
-#: common/models.py:1448
+#: common/models.py:1444
msgid "Display stock items in search preview window"
msgstr ""
-#: common/models.py:1454
+#: common/models.py:1450
msgid "Hide Unavailable Stock Items"
msgstr ""
-#: common/models.py:1455
+#: common/models.py:1451
msgid "Exclude stock items which are not available from the search preview window"
msgstr ""
-#: common/models.py:1461
+#: common/models.py:1457
msgid "Search Locations"
msgstr ""
-#: common/models.py:1462
+#: common/models.py:1458
msgid "Display stock locations in search preview window"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1464
msgid "Search Companies"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1465
msgid "Display companies in search preview window"
msgstr ""
-#: common/models.py:1475
+#: common/models.py:1471
msgid "Search Purchase Orders"
msgstr ""
-#: common/models.py:1476
+#: common/models.py:1472
msgid "Display purchase orders in search preview window"
msgstr ""
-#: common/models.py:1482
+#: common/models.py:1478
msgid "Exclude Inactive Purchase Orders"
msgstr ""
-#: common/models.py:1483
+#: common/models.py:1479
msgid "Exclude inactive purchase orders from search preview window"
msgstr ""
-#: common/models.py:1489
+#: common/models.py:1485
msgid "Search Sales Orders"
msgstr ""
-#: common/models.py:1490
+#: common/models.py:1486
msgid "Display sales orders in search preview window"
msgstr ""
-#: common/models.py:1496
+#: common/models.py:1492
msgid "Exclude Inactive Sales Orders"
msgstr ""
-#: common/models.py:1497
+#: common/models.py:1493
msgid "Exclude inactive sales orders from search preview window"
msgstr ""
-#: common/models.py:1503
+#: common/models.py:1499
msgid "Search Preview Results"
msgstr ""
-#: common/models.py:1504
+#: common/models.py:1500
msgid "Number of results to show in each section of the search preview window"
msgstr ""
-#: common/models.py:1510
+#: common/models.py:1506
msgid "Show Quantity in Forms"
msgstr ""
-#: common/models.py:1511
+#: common/models.py:1507
msgid "Display available part quantity in some forms"
msgstr ""
-#: common/models.py:1517
+#: common/models.py:1513
msgid "Escape Key Closes Forms"
msgstr ""
-#: common/models.py:1518
+#: common/models.py:1514
msgid "Use the escape key to close modal forms"
msgstr ""
-#: common/models.py:1524
+#: common/models.py:1520
msgid "Fixed Navbar"
msgstr ""
-#: common/models.py:1525
+#: common/models.py:1521
msgid "The navbar position is fixed to the top of the screen"
msgstr ""
-#: common/models.py:1531
+#: common/models.py:1527
msgid "Date Format"
msgstr ""
-#: common/models.py:1532
+#: common/models.py:1528
msgid "Preferred format for displaying dates"
msgstr ""
-#: common/models.py:1546 part/templates/part/detail.html:39
+#: common/models.py:1542 part/templates/part/detail.html:39
msgid "Part Scheduling"
msgstr ""
-#: common/models.py:1547
+#: common/models.py:1543
msgid "Display part scheduling information"
msgstr ""
-#: common/models.py:1615 company/forms.py:40
+#: common/models.py:1611 company/forms.py:39
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1622 company/serializers.py:288
-#: company/templates/company/supplier_part.html:263 order/models.py:921
+#: common/models.py:1618 company/serializers.py:285
+#: company/templates/company/supplier_part.html:263 order/models.py:917
#: templates/js/translated/part.js:998 templates/js/translated/part.js:1974
msgid "Price"
msgstr ""
-#: common/models.py:1623
+#: common/models.py:1619
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1783 common/models.py:1920
+#: common/models.py:1779 common/models.py:1916
msgid "Endpoint"
msgstr ""
-#: common/models.py:1784
+#: common/models.py:1780
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1793
+#: common/models.py:1789
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1798 part/models.py:985 plugin/models.py:106
+#: common/models.py:1794 part/models.py:973 plugin/models.py:105
#: templates/js/translated/table_filters.js:34
#: templates/js/translated/table_filters.js:96
#: templates/js/translated/table_filters.js:308
@@ -2442,79 +2442,79 @@ msgstr ""
msgid "Active"
msgstr ""
-#: common/models.py:1799
+#: common/models.py:1795
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1813
+#: common/models.py:1809
msgid "Token"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1810
msgid "Token for access"
msgstr ""
-#: common/models.py:1821
+#: common/models.py:1817
msgid "Secret"
msgstr ""
-#: common/models.py:1822
+#: common/models.py:1818
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1887
+#: common/models.py:1883
msgid "Message ID"
msgstr ""
-#: common/models.py:1888
+#: common/models.py:1884
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1896
+#: common/models.py:1892
msgid "Host"
msgstr ""
-#: common/models.py:1897
+#: common/models.py:1893
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1904
+#: common/models.py:1900
msgid "Header"
msgstr ""
-#: common/models.py:1905
+#: common/models.py:1901
msgid "Header of this message"
msgstr ""
-#: common/models.py:1911
+#: common/models.py:1907
msgid "Body"
msgstr ""
-#: common/models.py:1912
+#: common/models.py:1908
msgid "Body of this message"
msgstr ""
-#: common/models.py:1921
+#: common/models.py:1917
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1926
+#: common/models.py:1922
msgid "Worked on"
msgstr ""
-#: common/models.py:1927
+#: common/models.py:1923
msgid "Was the work on this message finished?"
msgstr ""
#: common/views.py:90 order/templates/order/purchase_order_detail.html:23
-#: order/views.py:119 part/views.py:205
+#: order/views.py:115 part/views.py:194
#: templates/patterns/wizard/upload.html:37
msgid "Upload File"
msgstr ""
-#: common/views.py:91 order/views.py:120
+#: common/views.py:91 order/views.py:116
#: part/templates/part/import_wizard/ajax_match_fields.html:45
-#: part/views.py:206 templates/patterns/wizard/match_fields.html:51
+#: part/views.py:195 templates/patterns/wizard/match_fields.html:51
msgid "Match Fields"
msgstr ""
@@ -2537,118 +2537,118 @@ msgstr ""
msgid "Previous Step"
msgstr ""
-#: company/forms.py:21 part/forms.py:43
+#: company/forms.py:20 part/forms.py:41
#: templates/InvenTree/settings/mixins/urls.html:14
msgid "URL"
msgstr ""
-#: company/forms.py:22 part/forms.py:44
+#: company/forms.py:21 part/forms.py:42
msgid "Image URL"
msgstr ""
-#: company/models.py:103
+#: company/models.py:97
msgid "Company description"
msgstr ""
-#: company/models.py:104
+#: company/models.py:98
msgid "Description of the company"
msgstr ""
-#: company/models.py:110 company/templates/company/company_base.html:100
+#: company/models.py:104 company/templates/company/company_base.html:100
#: templates/InvenTree/settings/plugin_settings.html:55
#: templates/js/translated/company.js:349
msgid "Website"
msgstr ""
-#: company/models.py:111
+#: company/models.py:105
msgid "Company website URL"
msgstr ""
-#: company/models.py:115 company/templates/company/company_base.html:118
+#: company/models.py:109 company/templates/company/company_base.html:118
msgid "Address"
msgstr ""
-#: company/models.py:116
+#: company/models.py:110
msgid "Company address"
msgstr ""
-#: company/models.py:119
+#: company/models.py:113
msgid "Phone number"
msgstr ""
-#: company/models.py:120
+#: company/models.py:114
msgid "Contact phone number"
msgstr ""
-#: company/models.py:123 company/templates/company/company_base.html:132
+#: company/models.py:117 company/templates/company/company_base.html:132
#: templates/InvenTree/settings/user.html:48
msgid "Email"
msgstr ""
-#: company/models.py:123
+#: company/models.py:117
msgid "Contact email address"
msgstr ""
-#: company/models.py:126 company/templates/company/company_base.html:139
+#: company/models.py:120 company/templates/company/company_base.html:139
msgid "Contact"
msgstr ""
-#: company/models.py:127
+#: company/models.py:121
msgid "Point of contact"
msgstr ""
-#: company/models.py:129
+#: company/models.py:123
msgid "Link to external company information"
msgstr ""
-#: company/models.py:137 part/models.py:877
+#: company/models.py:131 part/models.py:865
msgid "Image"
msgstr ""
-#: company/models.py:142
+#: company/models.py:136
msgid "is customer"
msgstr ""
-#: company/models.py:142
+#: company/models.py:136
msgid "Do you sell items to this company?"
msgstr ""
-#: company/models.py:144
+#: company/models.py:138
msgid "is supplier"
msgstr ""
-#: company/models.py:144
+#: company/models.py:138
msgid "Do you purchase items from this company?"
msgstr ""
-#: company/models.py:146
+#: company/models.py:140
msgid "is manufacturer"
msgstr ""
-#: company/models.py:146
+#: company/models.py:140
msgid "Does this company manufacture parts?"
msgstr ""
-#: company/models.py:150 company/serializers.py:294
-#: company/templates/company/company_base.html:106 part/serializers.py:156
-#: part/serializers.py:188 stock/serializers.py:176
+#: company/models.py:144 company/serializers.py:291
+#: company/templates/company/company_base.html:106 part/serializers.py:151
+#: part/serializers.py:183 stock/serializers.py:168
msgid "Currency"
msgstr ""
-#: company/models.py:153
+#: company/models.py:147
msgid "Default currency used for this company"
msgstr ""
-#: company/models.py:315 company/models.py:546 stock/models.py:616
+#: company/models.py:309 company/models.py:540 stock/models.py:607
#: stock/templates/stock/item_base.html:148 templates/js/translated/bom.js:542
msgid "Base Part"
msgstr ""
-#: company/models.py:319 company/models.py:550
+#: company/models.py:313 company/models.py:544
msgid "Select part"
msgstr ""
-#: company/models.py:330 company/templates/company/company_base.html:76
+#: company/models.py:324 company/templates/company/company_base.html:76
#: company/templates/company/manufacturer_part.html:90
#: company/templates/company/supplier_part.html:103
#: stock/templates/stock/item_base.html:370
@@ -2659,146 +2659,146 @@ msgstr ""
msgid "Manufacturer"
msgstr ""
-#: company/models.py:331 templates/js/translated/part.js:236
+#: company/models.py:325 templates/js/translated/part.js:236
msgid "Select manufacturer"
msgstr ""
-#: company/models.py:337 company/templates/company/manufacturer_part.html:101
+#: company/models.py:331 company/templates/company/manufacturer_part.html:101
#: company/templates/company/supplier_part.html:111
#: templates/js/translated/company.js:533
-#: templates/js/translated/company.js:818 templates/js/translated/order.js:1683
+#: templates/js/translated/company.js:818 templates/js/translated/order.js:1789
#: templates/js/translated/part.js:246 templates/js/translated/part.js:956
msgid "MPN"
msgstr ""
-#: company/models.py:338 templates/js/translated/part.js:247
+#: company/models.py:332 templates/js/translated/part.js:247
msgid "Manufacturer Part Number"
msgstr ""
-#: company/models.py:344
+#: company/models.py:338
msgid "URL for external manufacturer part link"
msgstr ""
-#: company/models.py:350
+#: company/models.py:344
msgid "Manufacturer part description"
msgstr ""
-#: company/models.py:397 company/models.py:420 company/models.py:569
+#: company/models.py:391 company/models.py:414 company/models.py:563
#: company/templates/company/manufacturer_part.html:7
#: company/templates/company/manufacturer_part.html:24
#: stock/templates/stock/item_base.html:380
msgid "Manufacturer Part"
msgstr ""
-#: company/models.py:427
+#: company/models.py:421
msgid "Parameter name"
msgstr ""
-#: company/models.py:433
+#: company/models.py:427
#: report/templates/report/inventree_test_report_base.html:95
-#: stock/models.py:2204 templates/js/translated/company.js:647
+#: stock/models.py:2195 templates/js/translated/company.js:647
#: templates/js/translated/part.js:776 templates/js/translated/stock.js:1304
msgid "Value"
msgstr ""
-#: company/models.py:434
+#: company/models.py:428
msgid "Parameter value"
msgstr ""
-#: company/models.py:440 part/models.py:952 part/models.py:2561
+#: company/models.py:434 part/models.py:940 part/models.py:2549
#: part/templates/part/part_base.html:280
#: templates/InvenTree/settings/settings.html:332
#: templates/js/translated/company.js:653 templates/js/translated/part.js:782
msgid "Units"
msgstr ""
-#: company/models.py:441
+#: company/models.py:435
msgid "Parameter units"
msgstr ""
-#: company/models.py:513
+#: company/models.py:507
msgid "Linked manufacturer part must reference the same base part"
msgstr ""
-#: company/models.py:556 company/templates/company/company_base.html:81
-#: company/templates/company/supplier_part.html:87 order/models.py:256
+#: company/models.py:550 company/templates/company/company_base.html:81
+#: company/templates/company/supplier_part.html:87 order/models.py:252
#: order/templates/order/order_base.html:112 part/bom.py:237 part/bom.py:265
#: stock/templates/stock/item_base.html:387
#: templates/js/translated/company.js:337
-#: templates/js/translated/company.js:774 templates/js/translated/order.js:1443
+#: templates/js/translated/company.js:774 templates/js/translated/order.js:1549
#: templates/js/translated/part.js:216 templates/js/translated/part.js:924
#: templates/js/translated/table_filters.js:415
msgid "Supplier"
msgstr ""
-#: company/models.py:557 templates/js/translated/part.js:217
+#: company/models.py:551 templates/js/translated/part.js:217
msgid "Select supplier"
msgstr ""
-#: company/models.py:562 company/templates/company/supplier_part.html:97
-#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1670
+#: company/models.py:556 company/templates/company/supplier_part.html:97
+#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1776
#: templates/js/translated/part.js:227 templates/js/translated/part.js:942
msgid "SKU"
msgstr ""
-#: company/models.py:563 templates/js/translated/part.js:228
+#: company/models.py:557 templates/js/translated/part.js:228
msgid "Supplier stock keeping unit"
msgstr ""
-#: company/models.py:570
+#: company/models.py:564
msgid "Select manufacturer part"
msgstr ""
-#: company/models.py:576
+#: company/models.py:570
msgid "URL for external supplier part link"
msgstr ""
-#: company/models.py:582
+#: company/models.py:576
msgid "Supplier part description"
msgstr ""
-#: company/models.py:587 company/templates/company/supplier_part.html:125
-#: part/models.py:2800 part/templates/part/upload_bom.html:59
+#: company/models.py:581 company/templates/company/supplier_part.html:125
+#: part/models.py:2788 part/templates/part/upload_bom.html:59
#: report/templates/report/inventree_po_report.html:92
-#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:406
+#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:398
msgid "Note"
msgstr ""
-#: company/models.py:591 part/models.py:1870
+#: company/models.py:585 part/models.py:1858
msgid "base cost"
msgstr ""
-#: company/models.py:591 part/models.py:1870
+#: company/models.py:585 part/models.py:1858
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:593 company/templates/company/supplier_part.html:118
-#: stock/models.py:640 stock/templates/stock/item_base.html:328
+#: company/models.py:587 company/templates/company/supplier_part.html:118
+#: stock/models.py:631 stock/templates/stock/item_base.html:328
#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1918
msgid "Packaging"
msgstr ""
-#: company/models.py:593
+#: company/models.py:587
msgid "Part packaging"
msgstr ""
-#: company/models.py:595 part/models.py:1872
+#: company/models.py:589 part/models.py:1860
msgid "multiple"
msgstr ""
-#: company/models.py:595
+#: company/models.py:589
msgid "Order multiple"
msgstr ""
-#: company/models.py:719
+#: company/models.py:713
msgid "last updated"
msgstr ""
-#: company/serializers.py:71
+#: company/serializers.py:68
msgid "Default currency used for this supplier"
msgstr ""
-#: company/serializers.py:72
+#: company/serializers.py:69
msgid "Currency Code"
msgstr ""
@@ -2809,7 +2809,7 @@ msgid "Company"
msgstr ""
#: company/templates/company/company_base.html:22
-#: templates/js/translated/order.js:416
+#: templates/js/translated/order.js:522
msgid "Create Purchase Order"
msgstr ""
@@ -2845,11 +2845,11 @@ msgstr ""
msgid "Download image from URL"
msgstr ""
-#: company/templates/company/company_base.html:86 order/models.py:604
-#: order/templates/order/sales_order_base.html:115 stock/models.py:659
-#: stock/models.py:660 stock/serializers.py:722
+#: company/templates/company/company_base.html:86 order/models.py:600
+#: order/templates/order/sales_order_base.html:116 stock/models.py:650
+#: stock/models.py:651 stock/serializers.py:714
#: stock/templates/stock/item_base.html:280
-#: templates/js/translated/company.js:329 templates/js/translated/order.js:2130
+#: templates/js/translated/company.js:329 templates/js/translated/order.js:2236
#: templates/js/translated/stock.js:2436
#: templates/js/translated/table_filters.js:419
msgid "Customer"
@@ -2935,7 +2935,7 @@ msgstr ""
#: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197
#: templates/InvenTree/settings/sidebar.html:47
#: templates/js/translated/search.js:190 templates/navbar.html:50
-#: users/models.py:45
+#: users/models.py:43
msgid "Purchase Orders"
msgstr ""
@@ -2958,7 +2958,7 @@ msgstr ""
#: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217
#: templates/InvenTree/settings/sidebar.html:49
#: templates/js/translated/search.js:214 templates/navbar.html:61
-#: users/models.py:46
+#: users/models.py:44
msgid "Sales Orders"
msgstr ""
@@ -2997,7 +2997,7 @@ msgstr ""
msgid "Supplier List"
msgstr ""
-#: company/templates/company/manufacturer_part.html:15 company/views.py:52
+#: company/templates/company/manufacturer_part.html:15 company/views.py:47
#: part/templates/part/prices.html:170 templates/InvenTree/search.html:178
#: templates/navbar.html:49
msgid "Manufacturers"
@@ -3030,7 +3030,7 @@ msgid "No manufacturer information available"
msgstr ""
#: company/templates/company/manufacturer_part.html:119
-#: company/templates/company/supplier_part.html:15 company/views.py:46
+#: company/templates/company/supplier_part.html:15 company/views.py:41
#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:166
#: templates/InvenTree/search.html:188 templates/navbar.html:48
msgid "Suppliers"
@@ -3046,7 +3046,7 @@ msgstr ""
#: company/templates/company/manufacturer_part.html:303
#: part/templates/part/detail.html:363 part/templates/part/detail.html:392
#: templates/js/translated/bom.js:699 templates/js/translated/company.js:426
-#: templates/js/translated/helpers.js:32 users/models.py:222
+#: templates/js/translated/helpers.js:32 users/models.py:220
msgid "Delete"
msgstr ""
@@ -3098,9 +3098,9 @@ msgid "Assigned Stock Items"
msgstr ""
#: company/templates/company/supplier_part.html:7
-#: company/templates/company/supplier_part.html:24 stock/models.py:624
+#: company/templates/company/supplier_part.html:24 stock/models.py:615
#: stock/templates/stock/item_base.html:396
-#: templates/js/translated/company.js:790 templates/js/translated/order.js:763
+#: templates/js/translated/company.js:790 templates/js/translated/order.js:869
#: templates/js/translated/stock.js:1875
msgid "Supplier Part"
msgstr ""
@@ -3217,536 +3217,532 @@ msgstr ""
#: stock/templates/stock/location.html:173
#: stock/templates/stock/location_sidebar.html:7
#: templates/InvenTree/search.html:152 templates/js/translated/search.js:138
-#: templates/js/translated/stock.js:2312 users/models.py:43
+#: templates/js/translated/stock.js:2312 users/models.py:41
msgid "Stock Items"
msgstr ""
-#: company/views.py:47
+#: company/views.py:42
msgid "New Supplier"
msgstr ""
-#: company/views.py:53
+#: company/views.py:48
msgid "New Manufacturer"
msgstr ""
-#: company/views.py:58 templates/InvenTree/search.html:208
+#: company/views.py:53 templates/InvenTree/search.html:208
#: templates/navbar.html:60
msgid "Customers"
msgstr ""
-#: company/views.py:59
+#: company/views.py:54
msgid "New Customer"
msgstr ""
-#: company/views.py:66 templates/js/translated/search.js:167
+#: company/views.py:61 templates/js/translated/search.js:167
msgid "Companies"
msgstr ""
-#: company/views.py:67
+#: company/views.py:62
msgid "New Company"
msgstr ""
-#: company/views.py:126 part/views.py:590
+#: company/views.py:121 part/views.py:579
msgid "Download Image"
msgstr ""
-#: company/views.py:155 part/views.py:622
+#: company/views.py:150 part/views.py:611
msgid "Image size exceeds maximum allowable size for download"
msgstr ""
-#: company/views.py:162 part/views.py:629
+#: company/views.py:157 part/views.py:618
#, python-brace-format
msgid "Invalid response: {code}"
msgstr ""
-#: company/views.py:171 part/views.py:638
+#: company/views.py:166 part/views.py:627
msgid "Supplied URL is not a valid image file"
msgstr ""
-#: label/api.py:94 report/api.py:201
-msgid "No valid objects provided to template"
-msgstr ""
-
-#: label/models.py:110
+#: label/models.py:105
msgid "Label name"
msgstr ""
-#: label/models.py:117
+#: label/models.py:112
msgid "Label description"
msgstr ""
-#: label/models.py:124
+#: label/models.py:119
msgid "Label"
msgstr ""
-#: label/models.py:125
+#: label/models.py:120
msgid "Label template file"
msgstr ""
-#: label/models.py:131 report/models.py:291
+#: label/models.py:126 report/models.py:286
msgid "Enabled"
msgstr ""
-#: label/models.py:132
+#: label/models.py:127
msgid "Label template is enabled"
msgstr ""
-#: label/models.py:137
+#: label/models.py:132
msgid "Width [mm]"
msgstr ""
-#: label/models.py:138
+#: label/models.py:133
msgid "Label width, specified in mm"
msgstr ""
-#: label/models.py:144
+#: label/models.py:139
msgid "Height [mm]"
msgstr ""
-#: label/models.py:145
+#: label/models.py:140
msgid "Label height, specified in mm"
msgstr ""
-#: label/models.py:151 report/models.py:284
+#: label/models.py:146 report/models.py:279
msgid "Filename Pattern"
msgstr ""
-#: label/models.py:152
+#: label/models.py:147
msgid "Pattern for generating label filenames"
msgstr ""
-#: label/models.py:255
+#: label/models.py:250
msgid "Query filters (comma-separated list of key=value pairs),"
msgstr ""
-#: label/models.py:256 label/models.py:316 label/models.py:363
-#: report/models.py:315 report/models.py:452 report/models.py:491
+#: label/models.py:251 label/models.py:295 label/models.py:327
+#: report/models.py:310 report/models.py:447 report/models.py:486
msgid "Filters"
msgstr ""
-#: label/models.py:315
+#: label/models.py:294
msgid "Query filters (comma-separated list of key=value pairs"
msgstr ""
-#: label/models.py:362
+#: label/models.py:326
msgid "Part query filters (comma-separated value of key=value pairs)"
msgstr ""
-#: order/models.py:134
+#: order/models.py:130
msgid "Order description"
msgstr ""
-#: order/models.py:136
+#: order/models.py:132
msgid "Link to external page"
msgstr ""
-#: order/models.py:144
+#: order/models.py:140
msgid "Created By"
msgstr ""
-#: order/models.py:151
+#: order/models.py:147
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:156
+#: order/models.py:152
msgid "Order notes"
msgstr ""
-#: order/models.py:242 order/models.py:594
+#: order/models.py:238 order/models.py:590
msgid "Order reference"
msgstr ""
-#: order/models.py:247 order/models.py:609
+#: order/models.py:243 order/models.py:605
msgid "Purchase order status"
msgstr ""
-#: order/models.py:257
+#: order/models.py:253
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:260 order/templates/order/order_base.html:124
-#: templates/js/translated/order.js:1452
+#: order/models.py:256 order/templates/order/order_base.html:124
+#: templates/js/translated/order.js:1558
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:260
+#: order/models.py:256
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:267
+#: order/models.py:263
msgid "received by"
msgstr ""
-#: order/models.py:272
+#: order/models.py:268
msgid "Issue Date"
msgstr ""
-#: order/models.py:273
+#: order/models.py:269
msgid "Date order was issued"
msgstr ""
-#: order/models.py:278
+#: order/models.py:274
msgid "Target Delivery Date"
msgstr ""
-#: order/models.py:279
+#: order/models.py:275
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:285
+#: order/models.py:281
msgid "Date order was completed"
msgstr ""
-#: order/models.py:314
+#: order/models.py:310
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:460
+#: order/models.py:456
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:605
+#: order/models.py:601
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:611
+#: order/models.py:607
msgid "Customer Reference "
msgstr ""
-#: order/models.py:611
+#: order/models.py:607
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:616
+#: order/models.py:612
msgid "Target date for order completion. Order will be overdue after this date."
msgstr ""
-#: order/models.py:619 order/models.py:1174
-#: templates/js/translated/order.js:2177 templates/js/translated/order.js:2328
+#: order/models.py:615 order/models.py:1170
+#: templates/js/translated/order.js:2283 templates/js/translated/order.js:2434
msgid "Shipment Date"
msgstr ""
-#: order/models.py:626
+#: order/models.py:622
msgid "shipped by"
msgstr ""
-#: order/models.py:692
+#: order/models.py:688
msgid "Order cannot be completed as no parts have been assigned"
msgstr ""
-#: order/models.py:696
+#: order/models.py:692
msgid "Only a pending order can be marked as complete"
msgstr ""
-#: order/models.py:699
+#: order/models.py:695
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:702
+#: order/models.py:698
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:882
+#: order/models.py:878
msgid "Item quantity"
msgstr ""
-#: order/models.py:888
+#: order/models.py:884
msgid "Line item reference"
msgstr ""
-#: order/models.py:890
+#: order/models.py:886
msgid "Line item notes"
msgstr ""
-#: order/models.py:895
+#: order/models.py:891
msgid "Target shipping date for this line item"
msgstr ""
-#: order/models.py:913
+#: order/models.py:909
msgid "Context"
msgstr ""
-#: order/models.py:914
+#: order/models.py:910
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:922
+#: order/models.py:918
msgid "Unit price"
msgstr ""
-#: order/models.py:955
+#: order/models.py:951
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:962
+#: order/models.py:958
msgid "deleted"
msgstr ""
-#: order/models.py:968 order/models.py:1050 order/models.py:1072
-#: order/models.py:1168 order/models.py:1268
-#: templates/js/translated/order.js:2719
+#: order/models.py:964 order/models.py:1046 order/models.py:1068
+#: order/models.py:1164 order/models.py:1273
+#: templates/js/translated/order.js:2874
msgid "Order"
msgstr ""
-#: order/models.py:969 order/models.py:1050
+#: order/models.py:965 order/models.py:1046
#: order/templates/order/order_base.html:9
#: order/templates/order/order_base.html:18
#: report/templates/report/inventree_po_report.html:76
#: stock/templates/stock/item_base.html:342
-#: templates/js/translated/order.js:764 templates/js/translated/order.js:1421
+#: templates/js/translated/order.js:870 templates/js/translated/order.js:1527
#: templates/js/translated/part.js:899 templates/js/translated/stock.js:1852
#: templates/js/translated/stock.js:2417
msgid "Purchase Order"
msgstr ""
-#: order/models.py:988
+#: order/models.py:984
msgid "Supplier part"
msgstr ""
-#: order/models.py:995 order/templates/order/order_base.html:169
-#: templates/js/translated/order.js:1197 templates/js/translated/order.js:1785
+#: order/models.py:991 order/templates/order/order_base.html:169
+#: templates/js/translated/order.js:1303 templates/js/translated/order.js:1891
#: templates/js/translated/part.js:993 templates/js/translated/part.js:1020
#: templates/js/translated/table_filters.js:330
msgid "Received"
msgstr ""
-#: order/models.py:996
+#: order/models.py:992
msgid "Number of items received"
msgstr ""
-#: order/models.py:1003 part/templates/part/prices.html:179 stock/models.py:754
-#: stock/serializers.py:167 stock/templates/stock/item_base.html:349
+#: order/models.py:999 part/templates/part/prices.html:179 stock/models.py:745
+#: stock/serializers.py:159 stock/templates/stock/item_base.html:349
#: templates/js/translated/stock.js:1906
msgid "Purchase Price"
msgstr ""
-#: order/models.py:1004
+#: order/models.py:1000
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:1012
+#: order/models.py:1008
msgid "Where does the Purchaser want this item to be stored?"
msgstr ""
-#: order/models.py:1082 part/templates/part/part_pricing.html:112
+#: order/models.py:1078 part/templates/part/part_pricing.html:112
#: part/templates/part/prices.html:119 part/templates/part/prices.html:288
msgid "Sale Price"
msgstr ""
-#: order/models.py:1083
+#: order/models.py:1079
msgid "Unit sale price"
msgstr ""
-#: order/models.py:1088
+#: order/models.py:1084
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:1175
+#: order/models.py:1171
msgid "Date of shipment"
msgstr ""
-#: order/models.py:1182
+#: order/models.py:1178
msgid "Checked By"
msgstr ""
-#: order/models.py:1183
+#: order/models.py:1179
msgid "User who checked this shipment"
msgstr ""
-#: order/models.py:1191
+#: order/models.py:1187
msgid "Shipment number"
msgstr ""
-#: order/models.py:1198
+#: order/models.py:1194
msgid "Shipment notes"
msgstr ""
-#: order/models.py:1205
+#: order/models.py:1201
msgid "Tracking Number"
msgstr ""
-#: order/models.py:1206
+#: order/models.py:1202
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:1216
+#: order/models.py:1213
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:1219
+#: order/models.py:1216
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:1306 order/models.py:1308
+#: order/models.py:1311 order/models.py:1313
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:1312
+#: order/models.py:1317
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:1314
+#: order/models.py:1319
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:1317
+#: order/models.py:1322
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:1321
+#: order/models.py:1326
msgid "StockItem is over-allocated"
msgstr ""
-#: order/models.py:1327 order/serializers.py:1002
+#: order/models.py:1332 order/serializers.py:1005
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:1330
+#: order/models.py:1335
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:1331
+#: order/models.py:1336
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:1339
+#: order/models.py:1344
msgid "Line"
msgstr ""
-#: order/models.py:1347 order/serializers.py:1112 order/serializers.py:1240
+#: order/models.py:1352 order/serializers.py:1115 order/serializers.py:1243
#: templates/js/translated/model_renderers.js:301
msgid "Shipment"
msgstr ""
-#: order/models.py:1348
+#: order/models.py:1353
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:1360 templates/InvenTree/notifications/notifications.html:70
+#: order/models.py:1365 templates/InvenTree/notifications/notifications.html:70
msgid "Item"
msgstr ""
-#: order/models.py:1361
+#: order/models.py:1366
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:1364
+#: order/models.py:1369
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/serializers.py:74
+#: order/serializers.py:69
msgid "Price currency"
msgstr ""
-#: order/serializers.py:203
+#: order/serializers.py:198
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:301
+#: order/serializers.py:296
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:325
+#: order/serializers.py:320
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:339
+#: order/serializers.py:334
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:344
+#: order/serializers.py:339
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:350
+#: order/serializers.py:345
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:351
+#: order/serializers.py:346
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:411 order/serializers.py:1077
+#: order/serializers.py:406 order/serializers.py:1080
msgid "Line Item"
msgstr ""
-#: order/serializers.py:417
+#: order/serializers.py:412
msgid "Line item does not match purchase order"
msgstr ""
-#: order/serializers.py:427 order/serializers.py:532
+#: order/serializers.py:422 order/serializers.py:527
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:446 templates/js/translated/order.js:1055
+#: order/serializers.py:441 templates/js/translated/order.js:1161
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:454 templates/js/translated/order.js:1066
+#: order/serializers.py:449 templates/js/translated/order.js:1172
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:467
+#: order/serializers.py:462
msgid "Barcode Hash"
msgstr ""
-#: order/serializers.py:468
+#: order/serializers.py:463
msgid "Unique identifier field"
msgstr ""
-#: order/serializers.py:485
+#: order/serializers.py:480
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:504
+#: order/serializers.py:499
msgid "An integer quantity must be provided for trackable parts"
msgstr ""
-#: order/serializers.py:544
+#: order/serializers.py:539
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:561
+#: order/serializers.py:556
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:572
+#: order/serializers.py:567
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:847
+#: order/serializers.py:842
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:917
+#: order/serializers.py:913
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:967 order/serializers.py:1089
+#: order/serializers.py:970 order/serializers.py:1092
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:989
+#: order/serializers.py:992
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1102
+#: order/serializers.py:1105
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1126 order/serializers.py:1251
+#: order/serializers.py:1129 order/serializers.py:1254
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1129 order/serializers.py:1254
+#: order/serializers.py:1132 order/serializers.py:1257
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1181
+#: order/serializers.py:1184
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1191
+#: order/serializers.py:1194
msgid "The following serial numbers are already allocated"
msgstr ""
@@ -3770,7 +3766,7 @@ msgid "Edit order"
msgstr ""
#: order/templates/order/order_base.html:47
-#: order/templates/order/sales_order_base.html:60
+#: order/templates/order/sales_order_base.html:61
msgid "Cancel order"
msgstr ""
@@ -3792,22 +3788,22 @@ msgid "Mark order as complete"
msgstr ""
#: order/templates/order/order_base.html:62
-#: order/templates/order/sales_order_base.html:67
+#: order/templates/order/sales_order_base.html:68
msgid "Complete Order"
msgstr ""
#: order/templates/order/order_base.html:84
-#: order/templates/order/sales_order_base.html:79
+#: order/templates/order/sales_order_base.html:80
msgid "Order Reference"
msgstr ""
#: order/templates/order/order_base.html:89
-#: order/templates/order/sales_order_base.html:84
+#: order/templates/order/sales_order_base.html:85
msgid "Order Description"
msgstr ""
#: order/templates/order/order_base.html:94
-#: order/templates/order/sales_order_base.html:89
+#: order/templates/order/sales_order_base.html:90
msgid "Order Status"
msgstr ""
@@ -3816,13 +3812,13 @@ msgid "No suppplier information available"
msgstr ""
#: order/templates/order/order_base.html:130
-#: order/templates/order/sales_order_base.html:128
+#: order/templates/order/sales_order_base.html:129
msgid "Completed Line Items"
msgstr ""
#: order/templates/order/order_base.html:136
-#: order/templates/order/sales_order_base.html:134
-#: order/templates/order/sales_order_base.html:144
+#: order/templates/order/sales_order_base.html:135
+#: order/templates/order/sales_order_base.html:145
msgid "Incomplete"
msgstr ""
@@ -3832,7 +3828,7 @@ msgid "Issued"
msgstr ""
#: order/templates/order/order_base.html:183
-#: order/templates/order/sales_order_base.html:189
+#: order/templates/order/sales_order_base.html:190
msgid "Total cost"
msgstr ""
@@ -3868,8 +3864,8 @@ msgstr ""
#: part/templates/part/import_wizard/match_references.html:49
#: templates/js/translated/bom.js:77 templates/js/translated/build.js:427
#: templates/js/translated/build.js:579 templates/js/translated/build.js:1989
-#: templates/js/translated/order.js:712 templates/js/translated/order.js:1144
-#: templates/js/translated/order.js:2387 templates/js/translated/stock.js:570
+#: templates/js/translated/order.js:818 templates/js/translated/order.js:1250
+#: templates/js/translated/order.js:2493 templates/js/translated/stock.js:570
#: templates/js/translated/stock.js:738
#: templates/patterns/wizard/match_fields.html:70
msgid "Remove row"
@@ -3920,7 +3916,7 @@ msgstr ""
#: order/templates/order/purchase_order_detail.html:53
#: order/templates/order/sales_order_detail.html:45
-#: order/templates/order/sales_order_detail.html:273
+#: order/templates/order/sales_order_detail.html:274
msgid "Add Extra Line"
msgstr ""
@@ -3950,27 +3946,32 @@ msgstr ""
msgid "Print packing list"
msgstr ""
-#: order/templates/order/sales_order_base.html:66
-#: order/templates/order/sales_order_base.html:239
+#: order/templates/order/sales_order_base.html:60
+#: templates/js/translated/order.js:211
+msgid "Complete Shipments"
+msgstr ""
+
+#: order/templates/order/sales_order_base.html:67
+#: order/templates/order/sales_order_base.html:250
msgid "Complete Sales Order"
msgstr ""
-#: order/templates/order/sales_order_base.html:102
+#: order/templates/order/sales_order_base.html:103
msgid "This Sales Order has not been fully allocated"
msgstr ""
-#: order/templates/order/sales_order_base.html:122
-#: templates/js/translated/order.js:2143
+#: order/templates/order/sales_order_base.html:123
+#: templates/js/translated/order.js:2249
msgid "Customer Reference"
msgstr ""
-#: order/templates/order/sales_order_base.html:140
+#: order/templates/order/sales_order_base.html:141
#: order/templates/order/sales_order_detail.html:100
#: order/templates/order/so_sidebar.html:11
msgid "Completed Shipments"
msgstr ""
-#: order/templates/order/sales_order_base.html:221
+#: order/templates/order/sales_order_base.html:222
msgid "Edit Sales Order"
msgstr ""
@@ -3992,73 +3993,73 @@ msgstr ""
msgid "New Shipment"
msgstr ""
-#: order/views.py:121
+#: order/views.py:117
msgid "Match Supplier Parts"
msgstr ""
-#: order/views.py:394
+#: order/views.py:390
msgid "Sales order not found"
msgstr ""
-#: order/views.py:400
+#: order/views.py:396
msgid "Price not found"
msgstr ""
-#: order/views.py:403
+#: order/views.py:399
#, python-brace-format
msgid "Updated {part} unit-price to {price}"
msgstr ""
-#: order/views.py:408
+#: order/views.py:404
#, python-brace-format
msgid "Updated {part} unit-price to {price} and quantity to {qty}"
msgstr ""
-#: part/api.py:516
+#: part/api.py:504
msgid "Incoming Purchase Order"
msgstr ""
-#: part/api.py:536
+#: part/api.py:524
msgid "Outgoing Sales Order"
msgstr ""
-#: part/api.py:554
+#: part/api.py:542
msgid "Stock produced by Build Order"
msgstr ""
-#: part/api.py:586
+#: part/api.py:574
msgid "Stock required for Build Order"
msgstr ""
-#: part/api.py:677
+#: part/api.py:665
msgid "Valid"
msgstr ""
-#: part/api.py:678
+#: part/api.py:666
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/api.py:683
+#: part/api.py:671
msgid "This option must be selected"
msgstr ""
-#: part/api.py:1055
+#: part/api.py:1043
msgid "Must be greater than zero"
msgstr ""
-#: part/api.py:1059
+#: part/api.py:1047
msgid "Must be a valid quantity"
msgstr ""
-#: part/api.py:1074
+#: part/api.py:1062
msgid "Specify location for initial part stock"
msgstr ""
-#: part/api.py:1105 part/api.py:1109 part/api.py:1124 part/api.py:1128
+#: part/api.py:1093 part/api.py:1097 part/api.py:1112 part/api.py:1116
msgid "This field is required"
msgstr ""
-#: part/bom.py:125 part/models.py:111 part/models.py:886
+#: part/bom.py:125 part/models.py:99 part/models.py:874
#: part/templates/part/category.html:108 part/templates/part/part_base.html:330
msgid "Default Location"
msgstr ""
@@ -4078,115 +4079,115 @@ msgstr ""
msgid "On Order"
msgstr ""
-#: part/forms.py:81
+#: part/forms.py:79
msgid "Select part category"
msgstr ""
-#: part/forms.py:100
+#: part/forms.py:98
msgid "Add parameter template to same level categories"
msgstr ""
-#: part/forms.py:104
+#: part/forms.py:102
msgid "Add parameter template to all categories"
msgstr ""
-#: part/forms.py:124
+#: part/forms.py:122
msgid "Input quantity for price calculation"
msgstr ""
-#: part/models.py:112
+#: part/models.py:100
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:115
+#: part/models.py:103
msgid "Default keywords"
msgstr ""
-#: part/models.py:115
+#: part/models.py:103
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:125 part/models.py:2637 part/templates/part/category.html:15
+#: part/models.py:113 part/models.py:2625 part/templates/part/category.html:15
#: part/templates/part/part_app_base.html:10
msgid "Part Category"
msgstr ""
-#: part/models.py:126 part/templates/part/category.html:128
+#: part/models.py:114 part/templates/part/category.html:128
#: templates/InvenTree/search.html:95 templates/js/translated/search.js:113
-#: users/models.py:40
+#: users/models.py:38
msgid "Part Categories"
msgstr ""
-#: part/models.py:367 part/templates/part/cat_link.html:3
+#: part/models.py:355 part/templates/part/cat_link.html:3
#: part/templates/part/category.html:17 part/templates/part/category.html:133
#: part/templates/part/category.html:153
#: part/templates/part/category_sidebar.html:9
#: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82
#: templates/InvenTree/settings/sidebar.html:39
#: templates/js/translated/part.js:1768 templates/js/translated/search.js:99
-#: templates/navbar.html:24 users/models.py:41
+#: templates/navbar.html:24 users/models.py:39
msgid "Parts"
msgstr ""
-#: part/models.py:459
+#: part/models.py:447
msgid "Invalid choice for parent part"
msgstr ""
-#: part/models.py:534 part/models.py:546
+#: part/models.py:522 part/models.py:534
#, python-brace-format
msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)"
msgstr ""
-#: part/models.py:676
+#: part/models.py:664
msgid "Next available serial numbers are"
msgstr ""
-#: part/models.py:680
+#: part/models.py:668
msgid "Next available serial number is"
msgstr ""
-#: part/models.py:685
+#: part/models.py:673
msgid "Most recent serial number is"
msgstr ""
-#: part/models.py:781
+#: part/models.py:769
msgid "Duplicate IPN not allowed in part settings"
msgstr ""
-#: part/models.py:810 part/models.py:2690
+#: part/models.py:798 part/models.py:2678
msgid "Part name"
msgstr ""
-#: part/models.py:817
+#: part/models.py:805
msgid "Is Template"
msgstr ""
-#: part/models.py:818
+#: part/models.py:806
msgid "Is this part a template part?"
msgstr ""
-#: part/models.py:828
+#: part/models.py:816
msgid "Is this part a variant of another part?"
msgstr ""
-#: part/models.py:829
+#: part/models.py:817
msgid "Variant Of"
msgstr ""
-#: part/models.py:835
+#: part/models.py:823
msgid "Part description"
msgstr ""
-#: part/models.py:840 part/templates/part/category.html:86
+#: part/models.py:828 part/templates/part/category.html:86
#: part/templates/part/part_base.html:294
msgid "Keywords"
msgstr ""
-#: part/models.py:841
+#: part/models.py:829
msgid "Part keywords to improve visibility in search results"
msgstr ""
-#: part/models.py:848 part/models.py:2387 part/models.py:2636
+#: part/models.py:836 part/models.py:2375 part/models.py:2624
#: part/templates/part/part_base.html:257
#: part/templates/part/set_category.html:15
#: templates/InvenTree/notifications/notifications.html:65
@@ -4195,432 +4196,432 @@ msgstr ""
msgid "Category"
msgstr ""
-#: part/models.py:849
+#: part/models.py:837
msgid "Part category"
msgstr ""
-#: part/models.py:854 part/templates/part/part_base.html:266
+#: part/models.py:842 part/templates/part/part_base.html:266
#: templates/js/translated/part.js:666 templates/js/translated/part.js:1322
#: templates/js/translated/stock.js:1669
msgid "IPN"
msgstr ""
-#: part/models.py:855
+#: part/models.py:843
msgid "Internal Part Number"
msgstr ""
-#: part/models.py:861
+#: part/models.py:849
msgid "Part revision or version number"
msgstr ""
-#: part/models.py:862 part/templates/part/part_base.html:273
-#: report/models.py:193 templates/js/translated/part.js:670
+#: part/models.py:850 part/templates/part/part_base.html:273
+#: report/models.py:188 templates/js/translated/part.js:670
msgid "Revision"
msgstr ""
-#: part/models.py:884
+#: part/models.py:872
msgid "Where is this item normally stored?"
msgstr ""
-#: part/models.py:931 part/templates/part/part_base.html:339
+#: part/models.py:919 part/templates/part/part_base.html:339
msgid "Default Supplier"
msgstr ""
-#: part/models.py:932
+#: part/models.py:920
msgid "Default supplier part"
msgstr ""
-#: part/models.py:939
+#: part/models.py:927
msgid "Default Expiry"
msgstr ""
-#: part/models.py:940
+#: part/models.py:928
msgid "Expiry time (in days) for stock items of this part"
msgstr ""
-#: part/models.py:945 part/templates/part/part_base.html:200
+#: part/models.py:933 part/templates/part/part_base.html:200
msgid "Minimum Stock"
msgstr ""
-#: part/models.py:946
+#: part/models.py:934
msgid "Minimum allowed stock level"
msgstr ""
-#: part/models.py:953
+#: part/models.py:941
msgid "Stock keeping units for this part"
msgstr ""
-#: part/models.py:959
+#: part/models.py:947
msgid "Can this part be built from other parts?"
msgstr ""
-#: part/models.py:965
+#: part/models.py:953
msgid "Can this part be used to build other parts?"
msgstr ""
-#: part/models.py:971
+#: part/models.py:959
msgid "Does this part have tracking for unique items?"
msgstr ""
-#: part/models.py:976
+#: part/models.py:964
msgid "Can this part be purchased from external suppliers?"
msgstr ""
-#: part/models.py:981
+#: part/models.py:969
msgid "Can this part be sold to customers?"
msgstr ""
-#: part/models.py:986
+#: part/models.py:974
msgid "Is this part active?"
msgstr ""
-#: part/models.py:991
+#: part/models.py:979
msgid "Is this a virtual part, such as a software product or license?"
msgstr ""
-#: part/models.py:996
+#: part/models.py:984
msgid "Part notes - supports Markdown formatting"
msgstr ""
-#: part/models.py:999
+#: part/models.py:987
msgid "BOM checksum"
msgstr ""
-#: part/models.py:999
+#: part/models.py:987
msgid "Stored BOM checksum"
msgstr ""
-#: part/models.py:1002
+#: part/models.py:990
msgid "BOM checked by"
msgstr ""
-#: part/models.py:1004
+#: part/models.py:992
msgid "BOM checked date"
msgstr ""
-#: part/models.py:1008
+#: part/models.py:996
msgid "Creation User"
msgstr ""
-#: part/models.py:1872
+#: part/models.py:1860
msgid "Sell multiple"
msgstr ""
-#: part/models.py:2437
+#: part/models.py:2425
msgid "Test templates can only be created for trackable parts"
msgstr ""
-#: part/models.py:2454
+#: part/models.py:2442
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2474 templates/js/translated/part.js:1819
+#: part/models.py:2462 templates/js/translated/part.js:1819
#: templates/js/translated/stock.js:1284
msgid "Test Name"
msgstr ""
-#: part/models.py:2475
+#: part/models.py:2463
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:2480
+#: part/models.py:2468
msgid "Test Description"
msgstr ""
-#: part/models.py:2481
+#: part/models.py:2469
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2486 templates/js/translated/part.js:1828
+#: part/models.py:2474 templates/js/translated/part.js:1828
#: templates/js/translated/table_filters.js:294
msgid "Required"
msgstr ""
-#: part/models.py:2487
+#: part/models.py:2475
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2492 templates/js/translated/part.js:1836
+#: part/models.py:2480 templates/js/translated/part.js:1836
msgid "Requires Value"
msgstr ""
-#: part/models.py:2493
+#: part/models.py:2481
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2498 templates/js/translated/part.js:1843
+#: part/models.py:2486 templates/js/translated/part.js:1843
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:2499
+#: part/models.py:2487
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:2510
+#: part/models.py:2498
#, python-brace-format
msgid "Illegal character in template name ({c})"
msgstr ""
-#: part/models.py:2546
+#: part/models.py:2534
msgid "Parameter template name must be unique"
msgstr ""
-#: part/models.py:2554
+#: part/models.py:2542
msgid "Parameter Name"
msgstr ""
-#: part/models.py:2561
+#: part/models.py:2549
msgid "Parameter Units"
msgstr ""
-#: part/models.py:2591
+#: part/models.py:2579
msgid "Parent Part"
msgstr ""
-#: part/models.py:2593 part/models.py:2642 part/models.py:2643
+#: part/models.py:2581 part/models.py:2630 part/models.py:2631
#: templates/InvenTree/settings/settings.html:226
msgid "Parameter Template"
msgstr ""
-#: part/models.py:2595
+#: part/models.py:2583
msgid "Data"
msgstr ""
-#: part/models.py:2595
+#: part/models.py:2583
msgid "Parameter Value"
msgstr ""
-#: part/models.py:2647 templates/InvenTree/settings/settings.html:235
+#: part/models.py:2635 templates/InvenTree/settings/settings.html:235
msgid "Default Value"
msgstr ""
-#: part/models.py:2648
+#: part/models.py:2636
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:2682
+#: part/models.py:2670
msgid "Part ID or part name"
msgstr ""
-#: part/models.py:2685 templates/js/translated/model_renderers.js:200
+#: part/models.py:2673 templates/js/translated/model_renderers.js:200
msgid "Part ID"
msgstr ""
-#: part/models.py:2686
+#: part/models.py:2674
msgid "Unique part ID value"
msgstr ""
-#: part/models.py:2689
+#: part/models.py:2677
msgid "Part Name"
msgstr ""
-#: part/models.py:2693
+#: part/models.py:2681
msgid "Part IPN"
msgstr ""
-#: part/models.py:2694
+#: part/models.py:2682
msgid "Part IPN value"
msgstr ""
-#: part/models.py:2697
+#: part/models.py:2685
msgid "Level"
msgstr ""
-#: part/models.py:2698
+#: part/models.py:2686
msgid "BOM level"
msgstr ""
-#: part/models.py:2773
+#: part/models.py:2761
msgid "Select parent part"
msgstr ""
-#: part/models.py:2781
+#: part/models.py:2769
msgid "Sub part"
msgstr ""
-#: part/models.py:2782
+#: part/models.py:2770
msgid "Select part to be used in BOM"
msgstr ""
-#: part/models.py:2788
+#: part/models.py:2776
msgid "BOM quantity for this BOM item"
msgstr ""
-#: part/models.py:2790 part/templates/part/upload_bom.html:58
+#: part/models.py:2778 part/templates/part/upload_bom.html:58
#: templates/js/translated/bom.js:898 templates/js/translated/bom.js:992
#: templates/js/translated/table_filters.js:92
msgid "Optional"
msgstr ""
-#: part/models.py:2790
+#: part/models.py:2778
msgid "This BOM item is optional"
msgstr ""
-#: part/models.py:2793 part/templates/part/upload_bom.html:55
+#: part/models.py:2781 part/templates/part/upload_bom.html:55
msgid "Overage"
msgstr ""
-#: part/models.py:2794
+#: part/models.py:2782
msgid "Estimated build wastage quantity (absolute or percentage)"
msgstr ""
-#: part/models.py:2797
+#: part/models.py:2785
msgid "BOM item reference"
msgstr ""
-#: part/models.py:2800
+#: part/models.py:2788
msgid "BOM item notes"
msgstr ""
-#: part/models.py:2802
+#: part/models.py:2790
msgid "Checksum"
msgstr ""
-#: part/models.py:2802
+#: part/models.py:2790
msgid "BOM line checksum"
msgstr ""
-#: part/models.py:2806 part/templates/part/upload_bom.html:57
+#: part/models.py:2794 part/templates/part/upload_bom.html:57
#: templates/js/translated/bom.js:1009
#: templates/js/translated/table_filters.js:68
#: templates/js/translated/table_filters.js:88
msgid "Inherited"
msgstr ""
-#: part/models.py:2807
+#: part/models.py:2795
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr ""
-#: part/models.py:2812 part/templates/part/upload_bom.html:56
+#: part/models.py:2800 part/templates/part/upload_bom.html:56
#: templates/js/translated/bom.js:1001
msgid "Allow Variants"
msgstr ""
-#: part/models.py:2813
+#: part/models.py:2801
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:2898 stock/models.py:495
+#: part/models.py:2886 stock/models.py:486
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:2907 part/models.py:2909
+#: part/models.py:2895 part/models.py:2897
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:3021
+#: part/models.py:3009
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:3043
+#: part/models.py:3031
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:3055
+#: part/models.py:3043
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:3063
+#: part/models.py:3051
msgid "Substitute part"
msgstr ""
-#: part/models.py:3074
+#: part/models.py:3062
msgid "Part 1"
msgstr ""
-#: part/models.py:3078
+#: part/models.py:3066
msgid "Part 2"
msgstr ""
-#: part/models.py:3078
+#: part/models.py:3066
msgid "Select Related Part"
msgstr ""
-#: part/models.py:3110
+#: part/models.py:3098
msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique"
msgstr ""
-#: part/serializers.py:157 part/serializers.py:189 stock/serializers.py:177
+#: part/serializers.py:152 part/serializers.py:184 stock/serializers.py:169
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:923
+#: part/serializers.py:918
msgid "Select part to copy BOM from"
msgstr ""
-#: part/serializers.py:934
+#: part/serializers.py:929
msgid "Remove Existing Data"
msgstr ""
-#: part/serializers.py:935
+#: part/serializers.py:930
msgid "Remove existing BOM items before copying"
msgstr ""
-#: part/serializers.py:940
+#: part/serializers.py:935
msgid "Include Inherited"
msgstr ""
-#: part/serializers.py:941
+#: part/serializers.py:936
msgid "Include BOM items which are inherited from templated parts"
msgstr ""
-#: part/serializers.py:946
+#: part/serializers.py:941
msgid "Skip Invalid Rows"
msgstr ""
-#: part/serializers.py:947
+#: part/serializers.py:942
msgid "Enable this option to skip invalid rows"
msgstr ""
-#: part/serializers.py:952
+#: part/serializers.py:947
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:953
+#: part/serializers.py:948
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
-#: part/serializers.py:997
+#: part/serializers.py:992
msgid "Clear Existing BOM"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:993
msgid "Delete existing BOM items before uploading"
msgstr ""
-#: part/serializers.py:1025
+#: part/serializers.py:1020
msgid "No part column specified"
msgstr ""
-#: part/serializers.py:1068
+#: part/serializers.py:1063
msgid "Multiple matching parts found"
msgstr ""
-#: part/serializers.py:1071
+#: part/serializers.py:1066
msgid "No matching part found"
msgstr ""
-#: part/serializers.py:1074
+#: part/serializers.py:1069
msgid "Part is not designated as a component"
msgstr ""
-#: part/serializers.py:1083
+#: part/serializers.py:1078
msgid "Quantity not provided"
msgstr ""
-#: part/serializers.py:1091
+#: part/serializers.py:1086
msgid "Invalid quantity"
msgstr ""
-#: part/serializers.py:1110
+#: part/serializers.py:1105
msgid "At least one BOM item is required"
msgstr ""
-#: part/tasks.py:15
+#: part/tasks.py:14
msgid "Low stock notification"
msgstr ""
-#: part/tasks.py:16
+#: part/tasks.py:15
#, python-brace-format
msgid "The available stock for {part.name} has fallen below the configured minimum level"
msgstr ""
@@ -5100,7 +5101,7 @@ msgstr ""
msgid "This part is a variant of %(link)s"
msgstr ""
-#: part/templates/part/part_base.html:194 templates/js/translated/order.js:3150
+#: part/templates/part/part_base.html:194 templates/js/translated/order.js:3305
#: templates/js/translated/table_filters.js:193
msgid "In Stock"
msgstr ""
@@ -5391,93 +5392,93 @@ msgstr ""
msgid "Create a new variant of template '%(full_name)s'."
msgstr ""
-#: part/templatetags/inventree_extras.py:191
+#: part/templatetags/inventree_extras.py:186
msgid "Unknown database"
msgstr ""
-#: part/templatetags/inventree_extras.py:228
+#: part/templatetags/inventree_extras.py:223
#, python-brace-format
msgid "{title} v{version}"
msgstr ""
-#: part/views.py:85
+#: part/views.py:74
msgid "Set Part Category"
msgstr ""
-#: part/views.py:135
+#: part/views.py:124
#, python-brace-format
msgid "Set category for {n} parts"
msgstr ""
-#: part/views.py:207
+#: part/views.py:196
msgid "Match References"
msgstr ""
-#: part/views.py:508
+#: part/views.py:497
msgid "None"
msgstr ""
-#: part/views.py:567
+#: part/views.py:556
msgid "Part QR Code"
msgstr ""
-#: part/views.py:669
+#: part/views.py:658
msgid "Select Part Image"
msgstr ""
-#: part/views.py:695
+#: part/views.py:684
msgid "Updated part image"
msgstr ""
-#: part/views.py:698
+#: part/views.py:687
msgid "Part image not found"
msgstr ""
-#: part/views.py:786
+#: part/views.py:775
msgid "Confirm Part Deletion"
msgstr ""
-#: part/views.py:793
+#: part/views.py:782
msgid "Part was deleted"
msgstr ""
-#: part/views.py:802
+#: part/views.py:791
msgid "Part Pricing"
msgstr ""
-#: part/views.py:951
+#: part/views.py:940
msgid "Create Part Parameter Template"
msgstr ""
-#: part/views.py:961
+#: part/views.py:950
msgid "Edit Part Parameter Template"
msgstr ""
-#: part/views.py:968
+#: part/views.py:957
msgid "Delete Part Parameter Template"
msgstr ""
-#: part/views.py:1010
+#: part/views.py:999
msgid "Delete Part Category"
msgstr ""
-#: part/views.py:1016
+#: part/views.py:1005
msgid "Part category was deleted"
msgstr ""
-#: part/views.py:1025
+#: part/views.py:1014
msgid "Create Category Parameter Template"
msgstr ""
-#: part/views.py:1126
+#: part/views.py:1115
msgid "Edit Category Parameter Template"
msgstr ""
-#: part/views.py:1182
+#: part/views.py:1171
msgid "Delete Category Parameter Template"
msgstr ""
-#: plugin/apps.py:49
+#: plugin/apps.py:48
msgid "Your enviroment has an outdated git version. This prevents InvenTree from loading plugin details."
msgstr ""
@@ -5489,47 +5490,47 @@ msgstr "Ingen åtgärd specificerad"
msgid "No matching action found"
msgstr "Ingen matchande åtgärd hittades"
-#: plugin/base/barcodes/api.py:53 plugin/base/barcodes/api.py:153
+#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:152
msgid "Must provide barcode_data parameter"
msgstr ""
-#: plugin/base/barcodes/api.py:129
+#: plugin/base/barcodes/api.py:128
msgid "No match found for barcode data"
msgstr ""
-#: plugin/base/barcodes/api.py:131
+#: plugin/base/barcodes/api.py:130
msgid "Match found for barcode data"
msgstr ""
-#: plugin/base/barcodes/api.py:156
+#: plugin/base/barcodes/api.py:155
msgid "Must provide stockitem parameter"
msgstr ""
-#: plugin/base/barcodes/api.py:163
+#: plugin/base/barcodes/api.py:162
msgid "No matching stock item found"
msgstr ""
-#: plugin/base/barcodes/api.py:193
+#: plugin/base/barcodes/api.py:192
msgid "Barcode already matches Stock Item"
msgstr ""
-#: plugin/base/barcodes/api.py:197
+#: plugin/base/barcodes/api.py:196
msgid "Barcode already matches Stock Location"
msgstr ""
-#: plugin/base/barcodes/api.py:201
+#: plugin/base/barcodes/api.py:200
msgid "Barcode already matches Part"
msgstr ""
-#: plugin/base/barcodes/api.py:207 plugin/base/barcodes/api.py:219
+#: plugin/base/barcodes/api.py:206 plugin/base/barcodes/api.py:218
msgid "Barcode hash already matches Stock Item"
msgstr ""
-#: plugin/base/barcodes/api.py:225
+#: plugin/base/barcodes/api.py:224
msgid "Barcode associated with Stock Item"
msgstr ""
-#: plugin/base/label/label.py:40
+#: plugin/base/label/label.py:39
msgid "Label printing failed"
msgstr ""
@@ -5551,51 +5552,51 @@ msgstr ""
msgid "Allow sending of emails for event notifications"
msgstr ""
-#: plugin/models.py:36
+#: plugin/models.py:35
msgid "Plugin Metadata"
msgstr ""
-#: plugin/models.py:37
+#: plugin/models.py:36
msgid "JSON metadata field, for use by external plugins"
msgstr ""
-#: plugin/models.py:86
+#: plugin/models.py:85
msgid "Plugin Configuration"
msgstr ""
-#: plugin/models.py:87
+#: plugin/models.py:86
msgid "Plugin Configurations"
msgstr ""
-#: plugin/models.py:92
+#: plugin/models.py:91
msgid "Key"
msgstr ""
-#: plugin/models.py:93
+#: plugin/models.py:92
msgid "Key of plugin"
msgstr ""
-#: plugin/models.py:101
+#: plugin/models.py:100
msgid "PluginName of the plugin"
msgstr ""
-#: plugin/models.py:107
+#: plugin/models.py:106
msgid "Is the plugin active"
msgstr ""
-#: plugin/models.py:180
+#: plugin/models.py:179
msgid "Plugin"
msgstr ""
-#: plugin/models.py:254
+#: plugin/models.py:253
msgid "Method"
msgstr ""
-#: plugin/plugin.py:247
+#: plugin/plugin.py:246
msgid "No author found"
msgstr ""
-#: plugin/plugin.py:261
+#: plugin/plugin.py:260
msgid "No date found"
msgstr ""
@@ -5663,92 +5664,96 @@ msgstr ""
msgid "Either packagename of URL must be provided"
msgstr ""
-#: report/api.py:233 report/api.py:280
+#: report/api.py:191
+msgid "No valid objects provided to template"
+msgstr ""
+
+#: report/api.py:223 report/api.py:270
#, python-brace-format
msgid "Template file '{template}' is missing or does not exist"
msgstr ""
-#: report/models.py:175
+#: report/models.py:170
msgid "Template name"
msgstr ""
-#: report/models.py:181
+#: report/models.py:176
msgid "Report template file"
msgstr ""
-#: report/models.py:188
+#: report/models.py:183
msgid "Report template description"
msgstr ""
-#: report/models.py:194
+#: report/models.py:189
msgid "Report revision number (auto-increments)"
msgstr ""
-#: report/models.py:285
+#: report/models.py:280
msgid "Pattern for generating report filenames"
msgstr ""
-#: report/models.py:292
+#: report/models.py:287
msgid "Report template is enabled"
msgstr ""
-#: report/models.py:316
+#: report/models.py:311
msgid "StockItem query filters (comma-separated list of key=value pairs)"
msgstr ""
-#: report/models.py:324
+#: report/models.py:319
msgid "Include Installed Tests"
msgstr ""
-#: report/models.py:325
+#: report/models.py:320
msgid "Include test results for stock items installed inside assembled item"
msgstr ""
-#: report/models.py:375
+#: report/models.py:370
msgid "Build Filters"
msgstr ""
-#: report/models.py:376
+#: report/models.py:371
msgid "Build query filters (comma-separated list of key=value pairs"
msgstr ""
-#: report/models.py:418
+#: report/models.py:413
msgid "Part Filters"
msgstr ""
-#: report/models.py:419
+#: report/models.py:414
msgid "Part query filters (comma-separated list of key=value pairs"
msgstr ""
-#: report/models.py:453
+#: report/models.py:448
msgid "Purchase order query filters"
msgstr ""
-#: report/models.py:492
+#: report/models.py:487
msgid "Sales order query filters"
msgstr ""
-#: report/models.py:547
+#: report/models.py:542
msgid "Snippet"
msgstr ""
-#: report/models.py:548
+#: report/models.py:543
msgid "Report snippet file"
msgstr ""
-#: report/models.py:552
+#: report/models.py:547
msgid "Snippet file description"
msgstr ""
-#: report/models.py:587
+#: report/models.py:582
msgid "Asset"
msgstr ""
-#: report/models.py:588
+#: report/models.py:583
msgid "Report asset file"
msgstr ""
-#: report/models.py:591
+#: report/models.py:586
msgid "Asset file description"
msgstr ""
@@ -5765,12 +5770,12 @@ msgid "Stock Item Test Report"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:79
-#: stock/models.py:664 stock/templates/stock/item_base.html:162
+#: stock/models.py:655 stock/templates/stock/item_base.html:162
#: templates/js/translated/build.js:420 templates/js/translated/build.js:572
#: templates/js/translated/build.js:1178 templates/js/translated/build.js:1688
#: templates/js/translated/model_renderers.js:106
-#: templates/js/translated/order.js:108 templates/js/translated/order.js:2836
-#: templates/js/translated/order.js:2925 templates/js/translated/stock.js:435
+#: templates/js/translated/order.js:109 templates/js/translated/order.js:2991
+#: templates/js/translated/order.js:3080 templates/js/translated/stock.js:435
msgid "Serial Number"
msgstr ""
@@ -5779,19 +5784,19 @@ msgid "Test Results"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:93
-#: stock/models.py:2192
+#: stock/models.py:2183
msgid "Test"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:94
-#: stock/models.py:2198
+#: stock/models.py:2189
msgid "Result"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:97
#: templates/InvenTree/settings/plugin.html:51
#: templates/InvenTree/settings/plugin_settings.html:38
-#: templates/js/translated/order.js:1469 templates/js/translated/stock.js:2345
+#: templates/js/translated/order.js:1575 templates/js/translated/stock.js:2345
msgid "Date"
msgstr ""
@@ -5814,362 +5819,362 @@ msgstr ""
msgid "Serial"
msgstr ""
-#: stock/api.py:554
+#: stock/api.py:542
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:561
+#: stock/api.py:549
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:586
+#: stock/api.py:574
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/models.py:91 stock/models.py:759
+#: stock/models.py:82 stock/models.py:750
#: stock/templates/stock/item_base.html:417
msgid "Owner"
msgstr ""
-#: stock/models.py:92 stock/models.py:760
+#: stock/models.py:83 stock/models.py:751
msgid "Select Owner"
msgstr ""
-#: stock/models.py:468
+#: stock/models.py:459
msgid "StockItem with this serial number already exists"
msgstr ""
-#: stock/models.py:512
+#: stock/models.py:503
#, python-brace-format
msgid "Part type ('{pf}') must be {pe}"
msgstr ""
-#: stock/models.py:522 stock/models.py:531
+#: stock/models.py:513 stock/models.py:522
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:523
+#: stock/models.py:514
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:545
+#: stock/models.py:536
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:551
+#: stock/models.py:542
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:565
+#: stock/models.py:556
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:608
+#: stock/models.py:599
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:617
+#: stock/models.py:608
msgid "Base part"
msgstr ""
-#: stock/models.py:625
+#: stock/models.py:616
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:631 stock/templates/stock/location.html:17
+#: stock/models.py:622 stock/templates/stock/location.html:17
#: stock/templates/stock/stock_app_base.html:8
msgid "Stock Location"
msgstr ""
-#: stock/models.py:634
+#: stock/models.py:625
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:641
+#: stock/models.py:632
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:647 stock/templates/stock/item_base.html:288
+#: stock/models.py:638 stock/templates/stock/item_base.html:288
msgid "Installed In"
msgstr ""
-#: stock/models.py:650
+#: stock/models.py:641
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:666
+#: stock/models.py:657
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:680
+#: stock/models.py:671
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:685
+#: stock/models.py:676
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:694
+#: stock/models.py:685
msgid "Source Build"
msgstr ""
-#: stock/models.py:696
+#: stock/models.py:687
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:707
+#: stock/models.py:698
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:710
+#: stock/models.py:701
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:716
+#: stock/models.py:707
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:722 stock/templates/stock/item_base.html:199
+#: stock/models.py:713 stock/templates/stock/item_base.html:199
#: templates/js/translated/stock.js:1822
msgid "Expiry Date"
msgstr ""
-#: stock/models.py:723
+#: stock/models.py:714
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:736
+#: stock/models.py:727
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:736
+#: stock/models.py:727
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:746 stock/templates/stock/item.html:137
+#: stock/models.py:737 stock/templates/stock/item.html:137
msgid "Stock Item Notes"
msgstr ""
-#: stock/models.py:755
+#: stock/models.py:746
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:787
+#: stock/models.py:778
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1307
+#: stock/models.py:1298
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1313
+#: stock/models.py:1304
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1319
+#: stock/models.py:1310
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({n})"
msgstr ""
-#: stock/models.py:1322
+#: stock/models.py:1313
msgid "Serial numbers must be a list of integers"
msgstr ""
-#: stock/models.py:1325
+#: stock/models.py:1316
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1332
+#: stock/models.py:1323
#, python-brace-format
msgid "Serial numbers already exist: {exists}"
msgstr ""
-#: stock/models.py:1403
+#: stock/models.py:1394
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:1406
+#: stock/models.py:1397
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:1409
+#: stock/models.py:1400
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:1412
+#: stock/models.py:1403
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:1415
+#: stock/models.py:1406
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:1418
+#: stock/models.py:1409
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:1425 stock/serializers.py:871
+#: stock/models.py:1416 stock/serializers.py:863
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:1429
+#: stock/models.py:1420
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:1433
+#: stock/models.py:1424
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:1437
+#: stock/models.py:1428
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:1609
+#: stock/models.py:1600
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2112
+#: stock/models.py:2103
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2169
+#: stock/models.py:2160
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:2175
+#: stock/models.py:2166
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:2193
+#: stock/models.py:2184
msgid "Test name"
msgstr ""
-#: stock/models.py:2199
+#: stock/models.py:2190
msgid "Test result"
msgstr ""
-#: stock/models.py:2205
+#: stock/models.py:2196
msgid "Test output value"
msgstr ""
-#: stock/models.py:2212
+#: stock/models.py:2203
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:2218
+#: stock/models.py:2209
msgid "Test notes"
msgstr ""
-#: stock/serializers.py:170
+#: stock/serializers.py:162
msgid "Purchase price of this stock item"
msgstr ""
-#: stock/serializers.py:291
+#: stock/serializers.py:283
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:306
+#: stock/serializers.py:298
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:312
+#: stock/serializers.py:304
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:323 stock/serializers.py:828 stock/serializers.py:1069
+#: stock/serializers.py:315 stock/serializers.py:820 stock/serializers.py:1061
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:330
+#: stock/serializers.py:322
msgid "Optional note field"
msgstr ""
-#: stock/serializers.py:343
+#: stock/serializers.py:335
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:360
+#: stock/serializers.py:352
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:402
+#: stock/serializers.py:394
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:418
+#: stock/serializers.py:410
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:425
+#: stock/serializers.py:417
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:463
+#: stock/serializers.py:455
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:468
+#: stock/serializers.py:460
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:685
+#: stock/serializers.py:677
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:689
+#: stock/serializers.py:681
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:693
+#: stock/serializers.py:685
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:723
+#: stock/serializers.py:715
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:729
+#: stock/serializers.py:721
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:737
+#: stock/serializers.py:729
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:747 stock/serializers.py:977
+#: stock/serializers.py:739 stock/serializers.py:969
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:835
+#: stock/serializers.py:827
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:840
+#: stock/serializers.py:832
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:841
+#: stock/serializers.py:833
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:846
+#: stock/serializers.py:838
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:847
+#: stock/serializers.py:839
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:857
+#: stock/serializers.py:849
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:939
+#: stock/serializers.py:931
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:967
+#: stock/serializers.py:959
msgid "Stock transaction notes"
msgstr ""
@@ -6482,7 +6487,7 @@ msgid "Sublocations"
msgstr ""
#: stock/templates/stock/location.html:156 templates/InvenTree/search.html:164
-#: templates/js/translated/search.js:153 users/models.py:42
+#: templates/js/translated/search.js:153 users/models.py:40
msgid "Stock Locations"
msgstr ""
@@ -6534,7 +6539,7 @@ msgstr ""
msgid "Child Items"
msgstr ""
-#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:227
+#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:221
msgid "Convert Stock Item"
msgstr ""
@@ -6559,55 +6564,55 @@ msgstr ""
msgid "Are you sure you want to delete this stock tracking entry?"
msgstr ""
-#: stock/views.py:125
+#: stock/views.py:119
msgid "Stock Location QR code"
msgstr ""
-#: stock/views.py:144
+#: stock/views.py:138
msgid "Return to Stock"
msgstr ""
-#: stock/views.py:153
+#: stock/views.py:147
msgid "Specify a valid location"
msgstr ""
-#: stock/views.py:164
+#: stock/views.py:158
msgid "Stock item returned from customer"
msgstr ""
-#: stock/views.py:175
+#: stock/views.py:169
msgid "Delete All Test Data"
msgstr ""
-#: stock/views.py:192
+#: stock/views.py:186
msgid "Confirm test data deletion"
msgstr ""
-#: stock/views.py:193
+#: stock/views.py:187
msgid "Check the confirmation box"
msgstr ""
-#: stock/views.py:208
+#: stock/views.py:202
msgid "Stock Item QR Code"
msgstr ""
-#: stock/views.py:264
+#: stock/views.py:258
msgid "Delete Stock Location"
msgstr ""
-#: stock/views.py:277
+#: stock/views.py:271
msgid "Delete Stock Item"
msgstr ""
-#: stock/views.py:288
+#: stock/views.py:282
msgid "Delete Stock Tracking Entry"
msgstr ""
-#: stock/views.py:295
+#: stock/views.py:289
msgid "Edit Stock Tracking Entry"
msgstr ""
-#: stock/views.py:304
+#: stock/views.py:298
msgid "Add Stock Tracking Entry"
msgstr ""
@@ -6881,7 +6886,7 @@ msgid "Install Plugin"
msgstr ""
#: templates/InvenTree/settings/plugin.html:48 templates/navbar.html:137
-#: users/models.py:39
+#: users/models.py:37
msgid "Admin"
msgstr ""
@@ -7326,9 +7331,9 @@ msgstr ""
#: templates/about.html:11 templates/about.html:105
#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621
-#: templates/js/translated/modals.js:55 templates/js/translated/modals.js:591
-#: templates/js/translated/modals.js:685 templates/js/translated/modals.js:993
-#: templates/js/translated/order.js:807 templates/modals.html:15
+#: templates/js/translated/modals.js:55 templates/js/translated/modals.js:594
+#: templates/js/translated/modals.js:688 templates/js/translated/modals.js:996
+#: templates/js/translated/order.js:913 templates/modals.html:15
#: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50
msgid "Close"
msgstr ""
@@ -7639,11 +7644,11 @@ msgstr ""
msgid "Remote image must not exceed maximum allowable file size"
msgstr ""
-#: templates/js/translated/api.js:190 templates/js/translated/modals.js:1063
+#: templates/js/translated/api.js:190 templates/js/translated/modals.js:1066
msgid "No Response"
msgstr ""
-#: templates/js/translated/api.js:191 templates/js/translated/modals.js:1064
+#: templates/js/translated/api.js:191 templates/js/translated/modals.js:1067
msgid "No response from the InvenTree server"
msgstr ""
@@ -7655,27 +7660,27 @@ msgstr ""
msgid "API request returned error code 400"
msgstr ""
-#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1073
+#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1076
msgid "Error 401: Not Authenticated"
msgstr ""
-#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1074
+#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1077
msgid "Authentication credentials not supplied"
msgstr ""
-#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1078
+#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1081
msgid "Error 403: Permission Denied"
msgstr ""
-#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1079
+#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1082
msgid "You do not have the required permissions to access this function"
msgstr ""
-#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1083
+#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1086
msgid "Error 404: Resource Not Found"
msgstr ""
-#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1084
+#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1087
msgid "The requested resource could not be located on the server"
msgstr ""
@@ -7687,11 +7692,11 @@ msgstr ""
msgid "HTTP method not allowed at URL"
msgstr ""
-#: templates/js/translated/api.js:222 templates/js/translated/modals.js:1088
+#: templates/js/translated/api.js:222 templates/js/translated/modals.js:1091
msgid "Error 408: Timeout"
msgstr ""
-#: templates/js/translated/api.js:223 templates/js/translated/modals.js:1089
+#: templates/js/translated/api.js:223 templates/js/translated/modals.js:1092
msgid "Connection timeout while requesting data from server"
msgstr ""
@@ -7760,7 +7765,7 @@ msgid "Unknown response from server"
msgstr ""
#: templates/js/translated/barcode.js:182
-#: templates/js/translated/modals.js:1053
+#: templates/js/translated/modals.js:1056
msgid "Invalid server response"
msgstr ""
@@ -7842,12 +7847,12 @@ msgid "Download BOM Template"
msgstr ""
#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287
-#: templates/js/translated/order.js:588 templates/js/translated/tables.js:53
+#: templates/js/translated/order.js:694 templates/js/translated/tables.js:53
msgid "Format"
msgstr ""
#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288
-#: templates/js/translated/order.js:589
+#: templates/js/translated/order.js:695
msgid "Select file format"
msgstr ""
@@ -8147,12 +8152,12 @@ msgid "No required tests for this build"
msgstr ""
#: templates/js/translated/build.js:1727 templates/js/translated/build.js:2556
-#: templates/js/translated/order.js:2873
+#: templates/js/translated/order.js:3028
msgid "Edit stock allocation"
msgstr ""
#: templates/js/translated/build.js:1729 templates/js/translated/build.js:2557
-#: templates/js/translated/order.js:2874
+#: templates/js/translated/order.js:3029
msgid "Delete stock allocation"
msgstr ""
@@ -8181,11 +8186,11 @@ msgid "Sufficient stock available"
msgstr ""
#: templates/js/translated/build.js:1856 templates/js/translated/build.js:2101
-#: templates/js/translated/build.js:2552 templates/js/translated/order.js:3160
+#: templates/js/translated/build.js:2552 templates/js/translated/order.js:3315
msgid "Allocated"
msgstr ""
-#: templates/js/translated/build.js:1904 templates/js/translated/order.js:3240
+#: templates/js/translated/build.js:1904 templates/js/translated/order.js:3395
msgid "Build stock"
msgstr ""
@@ -8193,21 +8198,21 @@ msgstr ""
msgid "Order stock"
msgstr ""
-#: templates/js/translated/build.js:1911 templates/js/translated/order.js:3233
+#: templates/js/translated/build.js:1911 templates/js/translated/order.js:3388
msgid "Allocate stock"
msgstr ""
#: templates/js/translated/build.js:1950 templates/js/translated/label.js:172
-#: templates/js/translated/order.js:635 templates/js/translated/order.js:2449
+#: templates/js/translated/order.js:741 templates/js/translated/order.js:2555
#: templates/js/translated/report.js:225
msgid "Select Parts"
msgstr ""
-#: templates/js/translated/build.js:1951 templates/js/translated/order.js:2450
+#: templates/js/translated/build.js:1951 templates/js/translated/order.js:2556
msgid "You must select at least one part to allocate"
msgstr ""
-#: templates/js/translated/build.js:2000 templates/js/translated/order.js:2398
+#: templates/js/translated/build.js:2000 templates/js/translated/order.js:2504
msgid "Specify stock allocation quantity"
msgstr ""
@@ -8219,7 +8224,7 @@ msgstr ""
msgid "All selected parts have been fully allocated"
msgstr ""
-#: templates/js/translated/build.js:2089 templates/js/translated/order.js:2464
+#: templates/js/translated/build.js:2089 templates/js/translated/order.js:2570
msgid "Select source location (leave blank to take from all locations)"
msgstr ""
@@ -8227,11 +8232,11 @@ msgstr ""
msgid "Allocate Stock Items to Build Order"
msgstr ""
-#: templates/js/translated/build.js:2128 templates/js/translated/order.js:2512
+#: templates/js/translated/build.js:2128 templates/js/translated/order.js:2667
msgid "No matching stock locations"
msgstr ""
-#: templates/js/translated/build.js:2200 templates/js/translated/order.js:2589
+#: templates/js/translated/build.js:2200 templates/js/translated/order.js:2744
msgid "No matching stock items"
msgstr ""
@@ -8305,7 +8310,7 @@ msgstr ""
msgid "Delete Manufacturer Part"
msgstr ""
-#: templates/js/translated/company.js:165 templates/js/translated/order.js:385
+#: templates/js/translated/company.js:165 templates/js/translated/order.js:491
msgid "Add Supplier"
msgstr ""
@@ -8440,40 +8445,40 @@ msgstr ""
msgid "View operation not allowed"
msgstr ""
-#: templates/js/translated/forms.js:641
+#: templates/js/translated/forms.js:646
msgid "Keep this form open"
msgstr ""
-#: templates/js/translated/forms.js:716
+#: templates/js/translated/forms.js:746
msgid "Enter a valid number"
msgstr ""
-#: templates/js/translated/forms.js:1208 templates/modals.html:19
+#: templates/js/translated/forms.js:1238 templates/modals.html:19
#: templates/modals.html:43
msgid "Form errors exist"
msgstr ""
-#: templates/js/translated/forms.js:1634
+#: templates/js/translated/forms.js:1671
msgid "No results found"
msgstr ""
-#: templates/js/translated/forms.js:1849 templates/search.html:29
+#: templates/js/translated/forms.js:1886 templates/search.html:29
msgid "Searching"
msgstr ""
-#: templates/js/translated/forms.js:2102
+#: templates/js/translated/forms.js:2139
msgid "Clear input"
msgstr ""
-#: templates/js/translated/forms.js:2567
+#: templates/js/translated/forms.js:2605
msgid "File Column"
msgstr ""
-#: templates/js/translated/forms.js:2567
+#: templates/js/translated/forms.js:2605
msgid "Field Name"
msgstr ""
-#: templates/js/translated/forms.js:2579
+#: templates/js/translated/forms.js:2617
msgid "Select Columns"
msgstr ""
@@ -8547,62 +8552,62 @@ msgstr ""
msgid "Select Label Template"
msgstr ""
-#: templates/js/translated/modals.js:78 templates/js/translated/modals.js:138
-#: templates/js/translated/modals.js:617
+#: templates/js/translated/modals.js:81 templates/js/translated/modals.js:141
+#: templates/js/translated/modals.js:620
msgid "Cancel"
msgstr ""
-#: templates/js/translated/modals.js:79 templates/js/translated/modals.js:137
-#: templates/js/translated/modals.js:684 templates/js/translated/modals.js:992
+#: templates/js/translated/modals.js:82 templates/js/translated/modals.js:140
+#: templates/js/translated/modals.js:687 templates/js/translated/modals.js:995
#: templates/modals.html:28 templates/modals.html:51
msgid "Submit"
msgstr ""
-#: templates/js/translated/modals.js:136
+#: templates/js/translated/modals.js:139
msgid "Form Title"
msgstr ""
-#: templates/js/translated/modals.js:399
+#: templates/js/translated/modals.js:402
msgid "Waiting for server..."
msgstr ""
-#: templates/js/translated/modals.js:558
+#: templates/js/translated/modals.js:561
msgid "Show Error Information"
msgstr ""
-#: templates/js/translated/modals.js:616
+#: templates/js/translated/modals.js:619
msgid "Accept"
msgstr ""
-#: templates/js/translated/modals.js:673
+#: templates/js/translated/modals.js:676
msgid "Loading Data"
msgstr ""
-#: templates/js/translated/modals.js:944
+#: templates/js/translated/modals.js:947
msgid "Invalid response from server"
msgstr ""
-#: templates/js/translated/modals.js:944
+#: templates/js/translated/modals.js:947
msgid "Form data missing from server response"
msgstr ""
-#: templates/js/translated/modals.js:956
+#: templates/js/translated/modals.js:959
msgid "Error posting form data"
msgstr ""
-#: templates/js/translated/modals.js:1053
+#: templates/js/translated/modals.js:1056
msgid "JSON response missing form data"
msgstr ""
-#: templates/js/translated/modals.js:1068
+#: templates/js/translated/modals.js:1071
msgid "Error 400: Bad Request"
msgstr ""
-#: templates/js/translated/modals.js:1069
+#: templates/js/translated/modals.js:1072
msgid "Server returned error code 400"
msgstr ""
-#: templates/js/translated/modals.js:1092
+#: templates/js/translated/modals.js:1095
msgid "Error requesting form data"
msgstr ""
@@ -8660,361 +8665,377 @@ msgstr ""
msgid "Notifications will load here"
msgstr ""
-#: templates/js/translated/order.js:84
+#: templates/js/translated/order.js:85
msgid "No stock items have been allocated to this shipment"
msgstr ""
-#: templates/js/translated/order.js:89
+#: templates/js/translated/order.js:90
msgid "The following stock items will be shipped"
msgstr ""
-#: templates/js/translated/order.js:129
+#: templates/js/translated/order.js:130
msgid "Complete Shipment"
msgstr ""
-#: templates/js/translated/order.js:135
+#: templates/js/translated/order.js:141
msgid "Confirm Shipment"
msgstr ""
-#: templates/js/translated/order.js:157
+#: templates/js/translated/order.js:197
+msgid "No pending shipments found"
+msgstr ""
+
+#: templates/js/translated/order.js:201
+msgid "No stock items have been allocated to pending shipments"
+msgstr ""
+
+#: templates/js/translated/order.js:233
+msgid "Skip"
+msgstr ""
+
+#: templates/js/translated/order.js:263
msgid "Complete Purchase Order"
msgstr ""
-#: templates/js/translated/order.js:163
+#: templates/js/translated/order.js:269
msgid "Mark this order as complete?"
msgstr ""
-#: templates/js/translated/order.js:169
+#: templates/js/translated/order.js:275
msgid "All line items have been received"
msgstr ""
-#: templates/js/translated/order.js:174
+#: templates/js/translated/order.js:280
msgid "This order has line items which have not been marked as received."
msgstr ""
-#: templates/js/translated/order.js:175
+#: templates/js/translated/order.js:281
msgid "Completing this order means that the order and line items will no longer be editable."
msgstr ""
-#: templates/js/translated/order.js:198
+#: templates/js/translated/order.js:304
msgid "Cancel Purchase Order"
msgstr ""
-#: templates/js/translated/order.js:203
+#: templates/js/translated/order.js:309
msgid "Are you sure you wish to cancel this purchase order?"
msgstr ""
-#: templates/js/translated/order.js:209
+#: templates/js/translated/order.js:315
msgid "This purchase order can not be cancelled"
msgstr ""
-#: templates/js/translated/order.js:232
+#: templates/js/translated/order.js:338
msgid "Issue Purchase Order"
msgstr ""
-#: templates/js/translated/order.js:237
+#: templates/js/translated/order.js:343
msgid "After placing this purchase order, line items will no longer be editable."
msgstr ""
-#: templates/js/translated/order.js:259
+#: templates/js/translated/order.js:365
msgid "Cancel Sales Order"
msgstr ""
-#: templates/js/translated/order.js:264
+#: templates/js/translated/order.js:370
msgid "Cancelling this order means that the order will no longer be editable."
msgstr ""
-#: templates/js/translated/order.js:318
+#: templates/js/translated/order.js:424
msgid "Create New Shipment"
msgstr ""
-#: templates/js/translated/order.js:343
+#: templates/js/translated/order.js:449
msgid "Add Customer"
msgstr ""
-#: templates/js/translated/order.js:368
+#: templates/js/translated/order.js:474
msgid "Create Sales Order"
msgstr ""
-#: templates/js/translated/order.js:585
+#: templates/js/translated/order.js:691
msgid "Export Order"
msgstr ""
-#: templates/js/translated/order.js:636
+#: templates/js/translated/order.js:742
msgid "At least one purchaseable part must be selected"
msgstr ""
-#: templates/js/translated/order.js:661
+#: templates/js/translated/order.js:767
msgid "Quantity to order"
msgstr ""
-#: templates/js/translated/order.js:670
+#: templates/js/translated/order.js:776
msgid "New supplier part"
msgstr ""
-#: templates/js/translated/order.js:688
+#: templates/js/translated/order.js:794
msgid "New purchase order"
msgstr ""
-#: templates/js/translated/order.js:721
+#: templates/js/translated/order.js:827
msgid "Add to purchase order"
msgstr ""
-#: templates/js/translated/order.js:830
+#: templates/js/translated/order.js:936
msgid "No matching supplier parts"
msgstr ""
-#: templates/js/translated/order.js:845
+#: templates/js/translated/order.js:951
msgid "No matching purchase orders"
msgstr ""
-#: templates/js/translated/order.js:1001
+#: templates/js/translated/order.js:1107
msgid "Select Line Items"
msgstr ""
-#: templates/js/translated/order.js:1002
+#: templates/js/translated/order.js:1108
msgid "At least one line item must be selected"
msgstr ""
-#: templates/js/translated/order.js:1022 templates/js/translated/order.js:1121
+#: templates/js/translated/order.js:1128 templates/js/translated/order.js:1227
msgid "Add batch code"
msgstr ""
-#: templates/js/translated/order.js:1028 templates/js/translated/order.js:1132
+#: templates/js/translated/order.js:1134 templates/js/translated/order.js:1238
msgid "Add serial numbers"
msgstr ""
-#: templates/js/translated/order.js:1040
+#: templates/js/translated/order.js:1146
msgid "Quantity to receive"
msgstr ""
-#: templates/js/translated/order.js:1104 templates/js/translated/stock.js:2085
+#: templates/js/translated/order.js:1210 templates/js/translated/stock.js:2085
msgid "Stock Status"
msgstr ""
-#: templates/js/translated/order.js:1195
+#: templates/js/translated/order.js:1301
msgid "Order Code"
msgstr ""
-#: templates/js/translated/order.js:1196
+#: templates/js/translated/order.js:1302
msgid "Ordered"
msgstr ""
-#: templates/js/translated/order.js:1198
+#: templates/js/translated/order.js:1304
msgid "Quantity to Receive"
msgstr ""
-#: templates/js/translated/order.js:1217
+#: templates/js/translated/order.js:1323
msgid "Confirm receipt of items"
msgstr ""
-#: templates/js/translated/order.js:1218
+#: templates/js/translated/order.js:1324
msgid "Receive Purchase Order Items"
msgstr ""
-#: templates/js/translated/order.js:1410 templates/js/translated/part.js:870
+#: templates/js/translated/order.js:1516 templates/js/translated/part.js:870
msgid "No purchase orders found"
msgstr ""
-#: templates/js/translated/order.js:1435 templates/js/translated/order.js:2120
+#: templates/js/translated/order.js:1541 templates/js/translated/order.js:2226
msgid "Order is overdue"
msgstr ""
-#: templates/js/translated/order.js:1485 templates/js/translated/order.js:2185
-#: templates/js/translated/order.js:2315
+#: templates/js/translated/order.js:1591 templates/js/translated/order.js:2291
+#: templates/js/translated/order.js:2421
msgid "Items"
msgstr ""
-#: templates/js/translated/order.js:1559 templates/js/translated/order.js:3292
+#: templates/js/translated/order.js:1665 templates/js/translated/order.js:3447
msgid "Duplicate Line Item"
msgstr ""
-#: templates/js/translated/order.js:1576 templates/js/translated/order.js:3314
+#: templates/js/translated/order.js:1682 templates/js/translated/order.js:3469
msgid "Edit Line Item"
msgstr ""
-#: templates/js/translated/order.js:1589 templates/js/translated/order.js:3325
+#: templates/js/translated/order.js:1695 templates/js/translated/order.js:3480
msgid "Delete Line Item"
msgstr ""
-#: templates/js/translated/order.js:1632
+#: templates/js/translated/order.js:1738
msgid "No line items found"
msgstr ""
-#: templates/js/translated/order.js:1659 templates/js/translated/order.js:3049
+#: templates/js/translated/order.js:1765 templates/js/translated/order.js:3204
msgid "Total"
msgstr ""
-#: templates/js/translated/order.js:1713 templates/js/translated/order.js:1915
-#: templates/js/translated/order.js:3074 templates/js/translated/order.js:3557
+#: templates/js/translated/order.js:1819 templates/js/translated/order.js:2021
+#: templates/js/translated/order.js:3229 templates/js/translated/order.js:3714
#: templates/js/translated/part.js:1948 templates/js/translated/part.js:2301
msgid "Unit Price"
msgstr ""
-#: templates/js/translated/order.js:1728 templates/js/translated/order.js:1931
-#: templates/js/translated/order.js:3090 templates/js/translated/order.js:3573
+#: templates/js/translated/order.js:1834 templates/js/translated/order.js:2037
+#: templates/js/translated/order.js:3245 templates/js/translated/order.js:3730
msgid "Total Price"
msgstr ""
-#: templates/js/translated/order.js:1769 templates/js/translated/order.js:3132
+#: templates/js/translated/order.js:1875 templates/js/translated/order.js:3287
#: templates/js/translated/part.js:979
msgid "This line item is overdue"
msgstr ""
-#: templates/js/translated/order.js:1828 templates/js/translated/part.js:1025
+#: templates/js/translated/order.js:1934 templates/js/translated/part.js:1025
msgid "Receive line item"
msgstr ""
-#: templates/js/translated/order.js:1832 templates/js/translated/order.js:3246
+#: templates/js/translated/order.js:1938 templates/js/translated/order.js:3401
msgid "Duplicate line item"
msgstr ""
-#: templates/js/translated/order.js:1833 templates/js/translated/order.js:3247
+#: templates/js/translated/order.js:1939 templates/js/translated/order.js:3402
msgid "Edit line item"
msgstr ""
-#: templates/js/translated/order.js:1834 templates/js/translated/order.js:3251
+#: templates/js/translated/order.js:1940 templates/js/translated/order.js:3406
msgid "Delete line item"
msgstr ""
-#: templates/js/translated/order.js:1980 templates/js/translated/order.js:3622
+#: templates/js/translated/order.js:2086 templates/js/translated/order.js:3779
msgid "Duplicate line"
msgstr ""
-#: templates/js/translated/order.js:1981 templates/js/translated/order.js:3623
+#: templates/js/translated/order.js:2087 templates/js/translated/order.js:3780
msgid "Edit line"
msgstr ""
-#: templates/js/translated/order.js:1982 templates/js/translated/order.js:3624
+#: templates/js/translated/order.js:2088 templates/js/translated/order.js:3781
msgid "Delete line"
msgstr ""
-#: templates/js/translated/order.js:2012 templates/js/translated/order.js:3654
+#: templates/js/translated/order.js:2118 templates/js/translated/order.js:3811
msgid "Duplicate Line"
msgstr ""
-#: templates/js/translated/order.js:2033 templates/js/translated/order.js:3675
+#: templates/js/translated/order.js:2139 templates/js/translated/order.js:3832
msgid "Edit Line"
msgstr ""
-#: templates/js/translated/order.js:2044 templates/js/translated/order.js:3686
+#: templates/js/translated/order.js:2150 templates/js/translated/order.js:3843
msgid "Delete Line"
msgstr ""
-#: templates/js/translated/order.js:2055
+#: templates/js/translated/order.js:2161
msgid "No matching line"
msgstr ""
-#: templates/js/translated/order.js:2096
+#: templates/js/translated/order.js:2202
msgid "No sales orders found"
msgstr ""
-#: templates/js/translated/order.js:2134
+#: templates/js/translated/order.js:2240
msgid "Invalid Customer"
msgstr ""
-#: templates/js/translated/order.js:2221
+#: templates/js/translated/order.js:2327
msgid "Edit shipment"
msgstr ""
-#: templates/js/translated/order.js:2224
+#: templates/js/translated/order.js:2330
msgid "Complete shipment"
msgstr ""
-#: templates/js/translated/order.js:2229
+#: templates/js/translated/order.js:2335
msgid "Delete shipment"
msgstr ""
-#: templates/js/translated/order.js:2249
+#: templates/js/translated/order.js:2355
msgid "Edit Shipment"
msgstr ""
-#: templates/js/translated/order.js:2266
+#: templates/js/translated/order.js:2372
msgid "Delete Shipment"
msgstr ""
-#: templates/js/translated/order.js:2300
+#: templates/js/translated/order.js:2406
msgid "No matching shipments found"
msgstr ""
-#: templates/js/translated/order.js:2310
+#: templates/js/translated/order.js:2416
msgid "Shipment Reference"
msgstr ""
-#: templates/js/translated/order.js:2334
+#: templates/js/translated/order.js:2440
msgid "Not shipped"
msgstr ""
-#: templates/js/translated/order.js:2340
+#: templates/js/translated/order.js:2446
msgid "Tracking"
msgstr ""
-#: templates/js/translated/order.js:2499
+#: templates/js/translated/order.js:2603
+msgid "Add Shipment"
+msgstr ""
+
+#: templates/js/translated/order.js:2654
msgid "Confirm stock allocation"
msgstr ""
-#: templates/js/translated/order.js:2500
+#: templates/js/translated/order.js:2655
msgid "Allocate Stock Items to Sales Order"
msgstr ""
-#: templates/js/translated/order.js:2708
+#: templates/js/translated/order.js:2863
msgid "No sales order allocations found"
msgstr ""
-#: templates/js/translated/order.js:2789
+#: templates/js/translated/order.js:2944
msgid "Edit Stock Allocation"
msgstr ""
-#: templates/js/translated/order.js:2806
+#: templates/js/translated/order.js:2961
msgid "Confirm Delete Operation"
msgstr ""
-#: templates/js/translated/order.js:2807
+#: templates/js/translated/order.js:2962
msgid "Delete Stock Allocation"
msgstr ""
-#: templates/js/translated/order.js:2850 templates/js/translated/order.js:2939
+#: templates/js/translated/order.js:3005 templates/js/translated/order.js:3094
#: templates/js/translated/stock.js:1545
msgid "Shipped to customer"
msgstr ""
-#: templates/js/translated/order.js:2858 templates/js/translated/order.js:2948
+#: templates/js/translated/order.js:3013 templates/js/translated/order.js:3103
msgid "Stock location not specified"
msgstr ""
-#: templates/js/translated/order.js:3230
+#: templates/js/translated/order.js:3385
msgid "Allocate serial numbers"
msgstr ""
-#: templates/js/translated/order.js:3236
+#: templates/js/translated/order.js:3391
msgid "Purchase stock"
msgstr ""
-#: templates/js/translated/order.js:3243 templates/js/translated/order.js:3439
+#: templates/js/translated/order.js:3398 templates/js/translated/order.js:3596
msgid "Calculate price"
msgstr ""
-#: templates/js/translated/order.js:3255
+#: templates/js/translated/order.js:3410
msgid "Cannot be deleted as items have been shipped"
msgstr ""
-#: templates/js/translated/order.js:3258
+#: templates/js/translated/order.js:3413
msgid "Cannot be deleted as items have been allocated"
msgstr ""
-#: templates/js/translated/order.js:3340
+#: templates/js/translated/order.js:3495
msgid "Allocate Serial Numbers"
msgstr ""
-#: templates/js/translated/order.js:3447
+#: templates/js/translated/order.js:3604
msgid "Update Unit Price"
msgstr ""
-#: templates/js/translated/order.js:3461
+#: templates/js/translated/order.js:3618
msgid "No matching line items"
msgstr ""
-#: templates/js/translated/order.js:3697
+#: templates/js/translated/order.js:3854
msgid "No matching lines"
msgstr ""
@@ -9486,7 +9507,7 @@ msgstr ""
msgid "Add Stock"
msgstr ""
-#: templates/js/translated/stock.js:887 users/models.py:218
+#: templates/js/translated/stock.js:887 users/models.py:216
msgid "Add"
msgstr ""
@@ -10201,58 +10222,59 @@ msgstr ""
msgid "No"
msgstr ""
-#: users/admin.py:62
+#: users/admin.py:61
msgid "Users"
msgstr ""
-#: users/admin.py:63
+#: users/admin.py:62
msgid "Select which users are assigned to this group"
msgstr ""
-#: users/admin.py:185
+#: users/admin.py:184
msgid "The following users are members of multiple groups:"
msgstr ""
-#: users/admin.py:208
+#: users/admin.py:207
msgid "Personal info"
msgstr ""
-#: users/admin.py:209
+#: users/admin.py:208
msgid "Permissions"
msgstr ""
-#: users/admin.py:212
+#: users/admin.py:211
msgid "Important dates"
msgstr ""
-#: users/models.py:205
+#: users/models.py:203
msgid "Permission set"
msgstr ""
-#: users/models.py:213
+#: users/models.py:211
msgid "Group"
msgstr ""
-#: users/models.py:216
+#: users/models.py:214
msgid "View"
msgstr ""
-#: users/models.py:216
+#: users/models.py:214
msgid "Permission to view items"
msgstr ""
-#: users/models.py:218
+#: users/models.py:216
msgid "Permission to add items"
msgstr ""
-#: users/models.py:220
+#: users/models.py:218
msgid "Change"
msgstr ""
-#: users/models.py:220
+#: users/models.py:218
msgid "Permissions to edit items"
msgstr ""
-#: users/models.py:222
+#: users/models.py:220
msgid "Permission to delete items"
msgstr ""
+
diff --git a/InvenTree/locale/th/LC_MESSAGES/django.po b/InvenTree/locale/th/LC_MESSAGES/django.po
index 73c09f3a08..f8bdf718c7 100644
--- a/InvenTree/locale/th/LC_MESSAGES/django.po
+++ b/InvenTree/locale/th/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-05-20 10:47+0000\n"
-"PO-Revision-Date: 2022-05-21 01:06\n"
+"POT-Creation-Date: 2022-05-23 23:24+0000\n"
+"PO-Revision-Date: 2022-05-24 01:43\n"
"Last-Translator: \n"
"Language-Team: Thai\n"
"Language: th_TH\n"
@@ -17,20 +17,20 @@ msgstr ""
"X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 154\n"
-#: InvenTree/api.py:50
+#: InvenTree/api.py:49
msgid "API endpoint not found"
msgstr ""
-#: InvenTree/exceptions.py:47
+#: InvenTree/exceptions.py:46
msgid "Error details can be found in the admin panel"
msgstr ""
-#: InvenTree/fields.py:98
+#: InvenTree/fields.py:96
msgid "Enter date"
msgstr ""
#: InvenTree/forms.py:124 templates/account/email_confirm.html:20
-#: templates/js/translated/forms.js:615
+#: templates/js/translated/forms.js:620
msgid "Confirm"
msgstr ""
@@ -79,7 +79,7 @@ msgstr ""
msgid "Duplicate serial: {sn}"
msgstr ""
-#: InvenTree/helpers.py:456 order/models.py:311 order/models.py:465
+#: InvenTree/helpers.py:456 order/models.py:307 order/models.py:461
msgid "Invalid quantity provided"
msgstr ""
@@ -116,89 +116,89 @@ msgstr ""
msgid "Number of unique serial numbers ({s}) must match quantity ({q})"
msgstr ""
-#: InvenTree/models.py:183
+#: InvenTree/models.py:181
msgid "Missing file"
msgstr ""
-#: InvenTree/models.py:184
+#: InvenTree/models.py:182
msgid "Missing external link"
msgstr ""
-#: InvenTree/models.py:195 stock/models.py:2211
+#: InvenTree/models.py:193 stock/models.py:2202
#: templates/js/translated/attachment.js:119
msgid "Attachment"
msgstr ""
-#: InvenTree/models.py:196
+#: InvenTree/models.py:194
msgid "Select file to attach"
msgstr ""
-#: InvenTree/models.py:202 company/models.py:129 company/models.py:343
-#: company/models.py:575 order/models.py:136 part/models.py:867
+#: InvenTree/models.py:200 company/models.py:123 company/models.py:337
+#: company/models.py:569 order/models.py:132 part/models.py:855
#: report/templates/report/inventree_build_order_base.html:165
#: templates/js/translated/company.js:540
#: templates/js/translated/company.js:829 templates/js/translated/part.js:1441
msgid "Link"
msgstr ""
-#: InvenTree/models.py:203 build/models.py:330 part/models.py:868
-#: stock/models.py:674
+#: InvenTree/models.py:201 build/models.py:330 part/models.py:856
+#: stock/models.py:665
msgid "Link to external URL"
msgstr ""
-#: InvenTree/models.py:206 templates/js/translated/attachment.js:163
+#: InvenTree/models.py:204 templates/js/translated/attachment.js:163
msgid "Comment"
msgstr ""
-#: InvenTree/models.py:206
+#: InvenTree/models.py:204
msgid "File comment"
msgstr ""
-#: InvenTree/models.py:212 InvenTree/models.py:213 common/models.py:1571
-#: common/models.py:1572 common/models.py:1806 common/models.py:1807
-#: common/models.py:2034 common/models.py:2035 part/models.py:2369
-#: part/models.py:2389 plugin/models.py:261 plugin/models.py:262
+#: InvenTree/models.py:210 InvenTree/models.py:211 common/models.py:1567
+#: common/models.py:1568 common/models.py:1802 common/models.py:1803
+#: common/models.py:2030 common/models.py:2031 part/models.py:2357
+#: part/models.py:2377 plugin/models.py:260 plugin/models.py:261
#: report/templates/report/inventree_test_report_base.html:96
#: templates/js/translated/stock.js:2518
msgid "User"
msgstr ""
-#: InvenTree/models.py:216
+#: InvenTree/models.py:214
msgid "upload date"
msgstr ""
-#: InvenTree/models.py:239
+#: InvenTree/models.py:237
msgid "Filename must not be empty"
msgstr ""
-#: InvenTree/models.py:262
+#: InvenTree/models.py:260
msgid "Invalid attachment directory"
msgstr ""
-#: InvenTree/models.py:272
+#: InvenTree/models.py:270
#, python-brace-format
msgid "Filename contains illegal character '{c}'"
msgstr ""
-#: InvenTree/models.py:275
+#: InvenTree/models.py:273
msgid "Filename missing extension"
msgstr ""
-#: InvenTree/models.py:282
+#: InvenTree/models.py:280
msgid "Attachment with this filename already exists"
msgstr ""
-#: InvenTree/models.py:289
+#: InvenTree/models.py:287
msgid "Error renaming file"
msgstr ""
-#: InvenTree/models.py:324
+#: InvenTree/models.py:322
msgid "Invalid choice"
msgstr ""
-#: InvenTree/models.py:340 InvenTree/models.py:341 common/models.py:1792
-#: company/models.py:426 label/models.py:109 part/models.py:811
-#: part/models.py:2553 plugin/models.py:100 report/models.py:174
+#: InvenTree/models.py:338 InvenTree/models.py:339 common/models.py:1788
+#: company/models.py:420 label/models.py:104 part/models.py:799
+#: part/models.py:2541 plugin/models.py:99 report/models.py:169
#: templates/InvenTree/notifications/notifications.html:84
#: templates/InvenTree/settings/mixins/urls.html:13
#: templates/InvenTree/settings/plugin.html:49
@@ -211,23 +211,23 @@ msgstr ""
msgid "Name"
msgstr ""
-#: InvenTree/models.py:347 build/models.py:207
-#: build/templates/build/detail.html:24 company/models.py:349
-#: company/models.py:581 company/templates/company/company_base.html:71
+#: InvenTree/models.py:345 build/models.py:207
+#: build/templates/build/detail.html:24 company/models.py:343
+#: company/models.py:575 company/templates/company/company_base.html:71
#: company/templates/company/manufacturer_part.html:75
-#: company/templates/company/supplier_part.html:73 label/models.py:116
-#: order/models.py:134 part/models.py:834 part/templates/part/category.html:74
+#: company/templates/company/supplier_part.html:73 label/models.py:111
+#: order/models.py:130 part/models.py:822 part/templates/part/category.html:74
#: part/templates/part/part_base.html:167
-#: part/templates/part/set_category.html:14 report/models.py:187
-#: report/models.py:552 report/models.py:591
+#: part/templates/part/set_category.html:14 report/models.py:182
+#: report/models.py:547 report/models.py:586
#: report/templates/report/inventree_build_order_base.html:118
#: stock/templates/stock/location.html:103
#: templates/InvenTree/settings/plugin_settings.html:33
#: templates/js/translated/bom.js:553 templates/js/translated/bom.js:872
#: templates/js/translated/build.js:2408 templates/js/translated/company.js:345
#: templates/js/translated/company.js:551
-#: templates/js/translated/company.js:840 templates/js/translated/order.js:1456
-#: templates/js/translated/order.js:1664 templates/js/translated/order.js:2148
+#: templates/js/translated/company.js:840 templates/js/translated/order.js:1562
+#: templates/js/translated/order.js:1770 templates/js/translated/order.js:2254
#: templates/js/translated/part.js:674 templates/js/translated/part.js:1082
#: templates/js/translated/part.js:1355 templates/js/translated/part.js:1755
#: templates/js/translated/part.js:1824 templates/js/translated/stock.js:1686
@@ -235,173 +235,173 @@ msgstr ""
msgid "Description"
msgstr ""
-#: InvenTree/models.py:348
+#: InvenTree/models.py:346
msgid "Description (optional)"
msgstr ""
-#: InvenTree/models.py:356
+#: InvenTree/models.py:354
msgid "parent"
msgstr ""
-#: InvenTree/serializers.py:62 part/models.py:2886
+#: InvenTree/serializers.py:59 part/models.py:2874
msgid "Must be a valid number"
msgstr ""
-#: InvenTree/serializers.py:296
+#: InvenTree/serializers.py:293
msgid "Filename"
msgstr ""
-#: InvenTree/serializers.py:331
+#: InvenTree/serializers.py:328
msgid "Invalid value"
msgstr ""
-#: InvenTree/serializers.py:352
+#: InvenTree/serializers.py:349
msgid "Data File"
msgstr ""
-#: InvenTree/serializers.py:353
+#: InvenTree/serializers.py:350
msgid "Select data file for upload"
msgstr ""
-#: InvenTree/serializers.py:377
+#: InvenTree/serializers.py:374
msgid "Unsupported file type"
msgstr ""
-#: InvenTree/serializers.py:383
+#: InvenTree/serializers.py:380
msgid "File is too large"
msgstr ""
-#: InvenTree/serializers.py:404
+#: InvenTree/serializers.py:401
msgid "No columns found in file"
msgstr ""
-#: InvenTree/serializers.py:407
+#: InvenTree/serializers.py:404
msgid "No data rows found in file"
msgstr ""
-#: InvenTree/serializers.py:533
+#: InvenTree/serializers.py:530
msgid "No data rows provided"
msgstr ""
-#: InvenTree/serializers.py:536
+#: InvenTree/serializers.py:533
msgid "No data columns supplied"
msgstr ""
-#: InvenTree/serializers.py:623
+#: InvenTree/serializers.py:620
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr ""
-#: InvenTree/serializers.py:632
+#: InvenTree/serializers.py:629
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr ""
-#: InvenTree/settings.py:672
+#: InvenTree/settings.py:669
msgid "Czech"
msgstr ""
-#: InvenTree/settings.py:673
+#: InvenTree/settings.py:670
msgid "German"
msgstr ""
-#: InvenTree/settings.py:674
+#: InvenTree/settings.py:671
msgid "Greek"
msgstr ""
-#: InvenTree/settings.py:675
+#: InvenTree/settings.py:672
msgid "English"
msgstr ""
-#: InvenTree/settings.py:676
+#: InvenTree/settings.py:673
msgid "Spanish"
msgstr ""
-#: InvenTree/settings.py:677
+#: InvenTree/settings.py:674
msgid "Spanish (Mexican)"
msgstr ""
-#: InvenTree/settings.py:678
+#: InvenTree/settings.py:675
msgid "Farsi / Persian"
msgstr ""
-#: InvenTree/settings.py:679
+#: InvenTree/settings.py:676
msgid "French"
msgstr ""
-#: InvenTree/settings.py:680
+#: InvenTree/settings.py:677
msgid "Hebrew"
msgstr ""
-#: InvenTree/settings.py:681
+#: InvenTree/settings.py:678
msgid "Hungarian"
msgstr ""
-#: InvenTree/settings.py:682
+#: InvenTree/settings.py:679
msgid "Italian"
msgstr ""
-#: InvenTree/settings.py:683
+#: InvenTree/settings.py:680
msgid "Japanese"
msgstr ""
-#: InvenTree/settings.py:684
+#: InvenTree/settings.py:681
msgid "Korean"
msgstr ""
-#: InvenTree/settings.py:685
+#: InvenTree/settings.py:682
msgid "Dutch"
msgstr ""
-#: InvenTree/settings.py:686
+#: InvenTree/settings.py:683
msgid "Norwegian"
msgstr ""
-#: InvenTree/settings.py:687
+#: InvenTree/settings.py:684
msgid "Polish"
msgstr ""
-#: InvenTree/settings.py:688
+#: InvenTree/settings.py:685
msgid "Portuguese"
msgstr ""
-#: InvenTree/settings.py:689
+#: InvenTree/settings.py:686
msgid "Portuguese (Brazilian)"
msgstr ""
-#: InvenTree/settings.py:690
+#: InvenTree/settings.py:687
msgid "Russian"
msgstr ""
-#: InvenTree/settings.py:691
+#: InvenTree/settings.py:688
msgid "Swedish"
msgstr ""
-#: InvenTree/settings.py:692
+#: InvenTree/settings.py:689
msgid "Thai"
msgstr ""
-#: InvenTree/settings.py:693
+#: InvenTree/settings.py:690
msgid "Turkish"
msgstr ""
-#: InvenTree/settings.py:694
+#: InvenTree/settings.py:691
msgid "Vietnamese"
msgstr ""
-#: InvenTree/settings.py:695
+#: InvenTree/settings.py:692
msgid "Chinese"
msgstr ""
-#: InvenTree/status.py:110
+#: InvenTree/status.py:108
msgid "Background worker check failed"
msgstr ""
-#: InvenTree/status.py:114
+#: InvenTree/status.py:112
msgid "Email backend not configured"
msgstr ""
-#: InvenTree/status.py:117
+#: InvenTree/status.py:115
msgid "InvenTree system health checks failed"
msgstr ""
@@ -416,7 +416,7 @@ msgstr ""
#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:326
#: order/templates/order/order_base.html:134
-#: order/templates/order/sales_order_base.html:132
+#: order/templates/order/sales_order_base.html:133
msgid "Complete"
msgstr ""
@@ -435,8 +435,8 @@ msgstr ""
msgid "Returned"
msgstr ""
-#: InvenTree/status_codes.py:143 order/models.py:1087
-#: templates/js/translated/order.js:2871 templates/js/translated/order.js:3188
+#: InvenTree/status_codes.py:143 order/models.py:1083
+#: templates/js/translated/order.js:3026 templates/js/translated/order.js:3343
msgid "Shipped"
msgstr ""
@@ -552,63 +552,63 @@ msgstr ""
msgid "Production"
msgstr ""
-#: InvenTree/validators.py:25
+#: InvenTree/validators.py:23
msgid "Not a valid currency code"
msgstr ""
-#: InvenTree/validators.py:53
+#: InvenTree/validators.py:51
msgid "Invalid character in part name"
msgstr ""
-#: InvenTree/validators.py:66
+#: InvenTree/validators.py:64
#, python-brace-format
msgid "IPN must match regex pattern {pat}"
msgstr ""
-#: InvenTree/validators.py:80 InvenTree/validators.py:94
-#: InvenTree/validators.py:108
+#: InvenTree/validators.py:78 InvenTree/validators.py:92
+#: InvenTree/validators.py:106
#, python-brace-format
msgid "Reference must match pattern {pattern}"
msgstr ""
-#: InvenTree/validators.py:116
+#: InvenTree/validators.py:114
#, python-brace-format
msgid "Illegal character in name ({x})"
msgstr ""
-#: InvenTree/validators.py:137 InvenTree/validators.py:153
+#: InvenTree/validators.py:135 InvenTree/validators.py:151
msgid "Overage value must not be negative"
msgstr ""
-#: InvenTree/validators.py:155
+#: InvenTree/validators.py:153
msgid "Overage must not exceed 100%"
msgstr ""
-#: InvenTree/validators.py:162
+#: InvenTree/validators.py:160
msgid "Invalid value for overage"
msgstr ""
-#: InvenTree/views.py:535
+#: InvenTree/views.py:534
msgid "Delete Item"
msgstr ""
-#: InvenTree/views.py:584
+#: InvenTree/views.py:583
msgid "Check box to confirm item deletion"
msgstr ""
-#: InvenTree/views.py:599 templates/InvenTree/settings/user.html:22
+#: InvenTree/views.py:598 templates/InvenTree/settings/user.html:22
msgid "Edit User Information"
msgstr ""
-#: InvenTree/views.py:610 templates/InvenTree/settings/user.html:19
+#: InvenTree/views.py:609 templates/InvenTree/settings/user.html:19
msgid "Set Password"
msgstr ""
-#: InvenTree/views.py:629
+#: InvenTree/views.py:628
msgid "Password fields must match"
msgstr ""
-#: InvenTree/views.py:876 templates/navbar.html:152
+#: InvenTree/views.py:875 templates/navbar.html:152
msgid "System Information"
msgstr ""
@@ -629,7 +629,7 @@ msgstr ""
#: order/templates/order/so_sidebar.html:13
#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221
#: templates/InvenTree/search.html:139
-#: templates/InvenTree/settings/sidebar.html:45 users/models.py:44
+#: templates/InvenTree/settings/sidebar.html:45 users/models.py:42
msgid "Build Orders"
msgstr ""
@@ -637,15 +637,15 @@ msgstr ""
msgid "Build Order Reference"
msgstr ""
-#: build/models.py:199 order/models.py:241 order/models.py:593
-#: order/models.py:888 part/models.py:2797
+#: build/models.py:199 order/models.py:237 order/models.py:589
+#: order/models.py:884 part/models.py:2785
#: part/templates/part/upload_bom.html:54
#: report/templates/report/inventree_po_report.html:91
#: report/templates/report/inventree_so_report.html:92
#: templates/js/translated/bom.js:688 templates/js/translated/bom.js:879
-#: templates/js/translated/build.js:1794 templates/js/translated/order.js:1695
-#: templates/js/translated/order.js:1896 templates/js/translated/order.js:3055
-#: templates/js/translated/order.js:3538
+#: templates/js/translated/build.js:1794 templates/js/translated/order.js:1801
+#: templates/js/translated/order.js:2002 templates/js/translated/order.js:3210
+#: templates/js/translated/order.js:3695
msgid "Reference"
msgstr ""
@@ -663,12 +663,12 @@ msgid "BuildOrder to which this build is allocated"
msgstr ""
#: build/models.py:225 build/templates/build/build_base.html:77
-#: build/templates/build/detail.html:29 company/models.py:717
-#: order/models.py:987 order/models.py:1076 part/models.py:366
-#: part/models.py:2315 part/models.py:2331 part/models.py:2350
-#: part/models.py:2367 part/models.py:2469 part/models.py:2591
-#: part/models.py:2681 part/models.py:2772 part/models.py:3062
-#: part/serializers.py:922 part/templates/part/part_app_base.html:8
+#: build/templates/build/detail.html:29 company/models.py:711
+#: order/models.py:983 order/models.py:1072 part/models.py:354
+#: part/models.py:2303 part/models.py:2319 part/models.py:2338
+#: part/models.py:2355 part/models.py:2457 part/models.py:2579
+#: part/models.py:2669 part/models.py:2760 part/models.py:3050
+#: part/serializers.py:917 part/templates/part/part_app_base.html:8
#: part/templates/part/part_pricing.html:12
#: part/templates/part/set_category.html:13
#: part/templates/part/upload_bom.html:52
@@ -683,10 +683,10 @@ msgstr ""
#: templates/js/translated/build.js:1158 templates/js/translated/build.js:1664
#: templates/js/translated/build.js:2100 templates/js/translated/build.js:2413
#: templates/js/translated/company.js:492
-#: templates/js/translated/company.js:749 templates/js/translated/order.js:93
-#: templates/js/translated/order.js:762 templates/js/translated/order.js:1194
-#: templates/js/translated/order.js:1649 templates/js/translated/order.js:2475
-#: templates/js/translated/order.js:2824 templates/js/translated/order.js:3039
+#: templates/js/translated/company.js:749 templates/js/translated/order.js:94
+#: templates/js/translated/order.js:868 templates/js/translated/order.js:1300
+#: templates/js/translated/order.js:1755 templates/js/translated/order.js:2581
+#: templates/js/translated/order.js:2979 templates/js/translated/order.js:3194
#: templates/js/translated/part.js:1067 templates/js/translated/part.js:1137
#: templates/js/translated/part.js:1333 templates/js/translated/stock.js:531
#: templates/js/translated/stock.js:696 templates/js/translated/stock.js:903
@@ -708,7 +708,7 @@ msgid "SalesOrder to which this build is allocated"
msgstr ""
#: build/models.py:247 build/serializers.py:790
-#: templates/js/translated/build.js:2088 templates/js/translated/order.js:2463
+#: templates/js/translated/build.js:2088 templates/js/translated/order.js:2569
msgid "Source Location"
msgstr ""
@@ -748,8 +748,8 @@ msgstr ""
msgid "Build status code"
msgstr ""
-#: build/models.py:285 build/serializers.py:220 order/serializers.py:445
-#: stock/models.py:678 templates/js/translated/order.js:1054
+#: build/models.py:285 build/serializers.py:220 order/serializers.py:440
+#: stock/models.py:669 templates/js/translated/order.js:1160
msgid "Batch Code"
msgstr ""
@@ -757,12 +757,12 @@ msgstr ""
msgid "Batch code for this build output"
msgstr ""
-#: build/models.py:292 order/models.py:138 part/models.py:1006
-#: part/templates/part/part_base.html:305 templates/js/translated/order.js:2161
+#: build/models.py:292 order/models.py:134 part/models.py:994
+#: part/templates/part/part_base.html:305 templates/js/translated/order.js:2267
msgid "Creation Date"
msgstr ""
-#: build/models.py:296 order/models.py:615
+#: build/models.py:296 order/models.py:611
msgid "Target completion date"
msgstr ""
@@ -770,7 +770,7 @@ msgstr ""
msgid "Target date for build completion. Build will be overdue after this date."
msgstr ""
-#: build/models.py:300 order/models.py:284
+#: build/models.py:300 order/models.py:280
#: templates/js/translated/build.js:2490
msgid "Completion Date"
msgstr ""
@@ -788,11 +788,11 @@ msgid "User who issued this build order"
msgstr ""
#: build/models.py:323 build/templates/build/build_base.html:190
-#: build/templates/build/detail.html:115 order/models.py:152
+#: build/templates/build/detail.html:115 order/models.py:148
#: order/templates/order/order_base.html:176
-#: order/templates/order/sales_order_base.html:182 part/models.py:1010
+#: order/templates/order/sales_order_base.html:183 part/models.py:998
#: report/templates/report/inventree_build_order_base.html:159
-#: templates/js/translated/build.js:2470 templates/js/translated/order.js:1490
+#: templates/js/translated/build.js:2470 templates/js/translated/order.js:1596
msgid "Responsible"
msgstr ""
@@ -803,27 +803,27 @@ msgstr ""
#: build/models.py:329 build/templates/build/detail.html:101
#: company/templates/company/manufacturer_part.html:107
#: company/templates/company/supplier_part.html:132
-#: part/templates/part/part_base.html:346 stock/models.py:672
+#: part/templates/part/part_base.html:346 stock/models.py:663
#: stock/templates/stock/item_base.html:363
msgid "External Link"
msgstr ""
#: build/models.py:334 build/serializers.py:390
-#: build/templates/build/sidebar.html:21 company/models.py:140
-#: company/models.py:588 company/templates/company/sidebar.html:25
-#: order/models.py:156 order/models.py:890 order/models.py:1197
+#: build/templates/build/sidebar.html:21 company/models.py:134
+#: company/models.py:582 company/templates/company/sidebar.html:25
+#: order/models.py:152 order/models.py:886 order/models.py:1193
#: order/templates/order/po_sidebar.html:11
-#: order/templates/order/so_sidebar.html:17 part/models.py:995
+#: order/templates/order/so_sidebar.html:17 part/models.py:983
#: part/templates/part/part_sidebar.html:59
#: report/templates/report/inventree_build_order_base.html:173
-#: stock/models.py:745 stock/models.py:2111 stock/models.py:2217
-#: stock/serializers.py:329 stock/serializers.py:467 stock/serializers.py:736
-#: stock/serializers.py:834 stock/serializers.py:966
+#: stock/models.py:736 stock/models.py:2102 stock/models.py:2208
+#: stock/serializers.py:321 stock/serializers.py:459 stock/serializers.py:728
+#: stock/serializers.py:826 stock/serializers.py:958
#: stock/templates/stock/stock_sidebar.html:25
#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1065
-#: templates/js/translated/company.js:845 templates/js/translated/order.js:1816
-#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2344
-#: templates/js/translated/order.js:3213 templates/js/translated/order.js:3609
+#: templates/js/translated/company.js:845 templates/js/translated/order.js:1922
+#: templates/js/translated/order.js:2073 templates/js/translated/order.js:2450
+#: templates/js/translated/order.js:3368 templates/js/translated/order.js:3766
#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1922
msgid "Notes"
msgstr ""
@@ -857,7 +857,7 @@ msgstr ""
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:1238 order/models.py:1324
+#: build/models.py:1238 order/models.py:1329
msgid "Allocation quantity must be greater than zero"
msgstr ""
@@ -879,16 +879,16 @@ msgstr ""
msgid "Build to allocate parts"
msgstr ""
-#: build/models.py:1392 build/serializers.py:631 order/serializers.py:958
-#: order/serializers.py:976 stock/serializers.py:401 stock/serializers.py:674
-#: stock/serializers.py:792 stock/templates/stock/item_base.html:10
+#: build/models.py:1392 build/serializers.py:631 order/serializers.py:961
+#: order/serializers.py:979 stock/serializers.py:393 stock/serializers.py:666
+#: stock/serializers.py:784 stock/templates/stock/item_base.html:10
#: stock/templates/stock/item_base.html:23
#: stock/templates/stock/item_base.html:357
#: templates/js/translated/build.js:738 templates/js/translated/build.js:743
#: templates/js/translated/build.js:2102 templates/js/translated/build.js:2538
-#: templates/js/translated/order.js:94 templates/js/translated/order.js:2476
-#: templates/js/translated/order.js:2731 templates/js/translated/order.js:2736
-#: templates/js/translated/order.js:2831 templates/js/translated/order.js:2921
+#: templates/js/translated/order.js:95 templates/js/translated/order.js:2582
+#: templates/js/translated/order.js:2886 templates/js/translated/order.js:2891
+#: templates/js/translated/order.js:2986 templates/js/translated/order.js:3076
#: templates/js/translated/stock.js:532 templates/js/translated/stock.js:697
#: templates/js/translated/stock.js:2454
msgid "Stock Item"
@@ -900,11 +900,11 @@ msgstr ""
#: build/models.py:1405 build/serializers.py:190
#: build/templates/build/build_base.html:82
-#: build/templates/build/detail.html:34 common/models.py:1614
-#: company/forms.py:39 company/templates/company/supplier_part.html:258
-#: order/models.py:881 order/models.py:1364 order/serializers.py:1097
-#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:123
-#: part/forms.py:139 part/forms.py:155 part/models.py:2788
+#: build/templates/build/detail.html:34 common/models.py:1610
+#: company/forms.py:38 company/templates/company/supplier_part.html:258
+#: order/models.py:877 order/models.py:1369 order/serializers.py:1100
+#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:121
+#: part/forms.py:137 part/forms.py:153 part/models.py:2776
#: part/templates/part/detail.html:953 part/templates/part/detail.html:1039
#: part/templates/part/part_pricing.html:16
#: part/templates/part/upload_bom.html:53
@@ -913,7 +913,7 @@ msgstr ""
#: report/templates/report/inventree_so_report.html:91
#: report/templates/report/inventree_test_report_base.html:81
#: report/templates/report/inventree_test_report_base.html:139
-#: stock/serializers.py:290 stock/templates/stock/item_base.html:187
+#: stock/serializers.py:282 stock/templates/stock/item_base.html:187
#: stock/templates/stock/item_base.html:252
#: stock/templates/stock/item_base.html:260
#: templates/js/translated/barcode.js:437 templates/js/translated/bom.js:689
@@ -922,11 +922,11 @@ msgstr ""
#: templates/js/translated/build.js:1180 templates/js/translated/build.js:1690
#: templates/js/translated/build.js:2103
#: templates/js/translated/model_renderers.js:108
-#: templates/js/translated/order.js:110 templates/js/translated/order.js:765
-#: templates/js/translated/order.js:1701 templates/js/translated/order.js:1902
-#: templates/js/translated/order.js:2477 templates/js/translated/order.js:2750
-#: templates/js/translated/order.js:2838 templates/js/translated/order.js:2927
-#: templates/js/translated/order.js:3061 templates/js/translated/order.js:3544
+#: templates/js/translated/order.js:111 templates/js/translated/order.js:871
+#: templates/js/translated/order.js:1807 templates/js/translated/order.js:2008
+#: templates/js/translated/order.js:2583 templates/js/translated/order.js:2905
+#: templates/js/translated/order.js:2993 templates/js/translated/order.js:3082
+#: templates/js/translated/order.js:3216 templates/js/translated/order.js:3701
#: templates/js/translated/part.js:967 templates/js/translated/part.js:1969
#: templates/js/translated/part.js:2200 templates/js/translated/part.js:2234
#: templates/js/translated/part.js:2312 templates/js/translated/stock.js:403
@@ -972,10 +972,10 @@ msgstr ""
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:203 build/serializers.py:651 order/models.py:309
-#: order/serializers.py:294 order/serializers.py:440 part/serializers.py:593
-#: part/serializers.py:1089 stock/models.py:505 stock/models.py:1316
-#: stock/serializers.py:302
+#: build/serializers.py:203 build/serializers.py:651 order/models.py:305
+#: order/serializers.py:289 order/serializers.py:435 part/serializers.py:588
+#: part/serializers.py:1084 stock/models.py:496 stock/models.py:1307
+#: stock/serializers.py:294
msgid "Quantity must be greater than zero"
msgstr ""
@@ -987,8 +987,8 @@ msgstr ""
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:227 order/serializers.py:453 order/serializers.py:1101
-#: stock/serializers.py:311 templates/js/translated/order.js:1065
+#: build/serializers.py:227 order/serializers.py:448 order/serializers.py:1104
+#: stock/serializers.py:303 templates/js/translated/order.js:1171
#: templates/js/translated/stock.js:238 templates/js/translated/stock.js:404
msgid "Serial Numbers"
msgstr ""
@@ -1005,7 +1005,7 @@ msgstr ""
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:276 stock/api.py:602
+#: build/serializers.py:276 stock/api.py:590
msgid "The following serial numbers already exist"
msgstr ""
@@ -1013,14 +1013,14 @@ msgstr ""
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:372 order/serializers.py:426 order/serializers.py:531
-#: stock/serializers.py:322 stock/serializers.py:462 stock/serializers.py:827
-#: stock/serializers.py:1068 stock/templates/stock/item_base.html:303
+#: build/serializers.py:372 order/serializers.py:421 order/serializers.py:526
+#: stock/serializers.py:314 stock/serializers.py:454 stock/serializers.py:819
+#: stock/serializers.py:1060 stock/templates/stock/item_base.html:303
#: templates/js/translated/barcode.js:436
#: templates/js/translated/barcode.js:618 templates/js/translated/build.js:750
-#: templates/js/translated/build.js:1702 templates/js/translated/order.js:1092
-#: templates/js/translated/order.js:2743 templates/js/translated/order.js:2846
-#: templates/js/translated/order.js:2854 templates/js/translated/order.js:2935
+#: templates/js/translated/build.js:1702 templates/js/translated/order.js:1198
+#: templates/js/translated/order.js:2898 templates/js/translated/order.js:3001
+#: templates/js/translated/order.js:3009 templates/js/translated/order.js:3090
#: templates/js/translated/part.js:180 templates/js/translated/stock.js:533
#: templates/js/translated/stock.js:698 templates/js/translated/stock.js:905
#: templates/js/translated/stock.js:1793 templates/js/translated/stock.js:2395
@@ -1032,11 +1032,11 @@ msgid "Location for completed build outputs"
msgstr ""
#: build/serializers.py:379 build/templates/build/build_base.html:142
-#: build/templates/build/detail.html:62 order/models.py:609
-#: order/serializers.py:463 stock/templates/stock/item_base.html:193
+#: build/templates/build/detail.html:62 order/models.py:605
+#: order/serializers.py:458 stock/templates/stock/item_base.html:193
#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2442
-#: templates/js/translated/order.js:1199 templates/js/translated/order.js:1460
-#: templates/js/translated/order.js:2153 templates/js/translated/stock.js:1768
+#: templates/js/translated/order.js:1305 templates/js/translated/order.js:1566
+#: templates/js/translated/order.js:2259 templates/js/translated/stock.js:1768
#: templates/js/translated/stock.js:2472 templates/js/translated/stock.js:2604
msgid "Status"
msgstr ""
@@ -1097,8 +1097,8 @@ msgstr ""
msgid "No build outputs have been created for this build order"
msgstr ""
-#: build/serializers.py:556 build/serializers.py:605 part/models.py:2912
-#: part/models.py:3054
+#: build/serializers.py:556 build/serializers.py:605 part/models.py:2900
+#: part/models.py:3042
msgid "BOM Item"
msgstr ""
@@ -1114,11 +1114,11 @@ msgstr ""
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:637 stock/serializers.py:681
+#: build/serializers.py:637 stock/serializers.py:673
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:694 order/serializers.py:1009
+#: build/serializers.py:694 order/serializers.py:1012
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
@@ -1135,7 +1135,7 @@ msgstr ""
msgid "This stock item has already been allocated to this build output"
msgstr ""
-#: build/serializers.py:739 order/serializers.py:1271
+#: build/serializers.py:739 order/serializers.py:1274
msgid "Allocation items must be provided"
msgstr ""
@@ -1233,13 +1233,13 @@ msgid "Stock has not been fully allocated to this Build Order"
msgstr ""
#: build/templates/build/build_base.html:151
-#: build/templates/build/detail.html:131 order/models.py:894
+#: build/templates/build/detail.html:131 order/models.py:890
#: order/templates/order/order_base.html:162
-#: order/templates/order/sales_order_base.html:163
+#: order/templates/order/sales_order_base.html:164
#: report/templates/report/inventree_build_order_base.html:126
-#: templates/js/translated/build.js:2482 templates/js/translated/order.js:1477
-#: templates/js/translated/order.js:1763 templates/js/translated/order.js:2169
-#: templates/js/translated/order.js:3124 templates/js/translated/part.js:971
+#: templates/js/translated/build.js:2482 templates/js/translated/order.js:1583
+#: templates/js/translated/order.js:1869 templates/js/translated/order.js:2275
+#: templates/js/translated/order.js:3279 templates/js/translated/part.js:971
msgid "Target Date"
msgstr ""
@@ -1251,7 +1251,7 @@ msgstr ""
#: build/templates/build/build_base.html:156
#: build/templates/build/build_base.html:201
#: order/templates/order/order_base.html:98
-#: order/templates/order/sales_order_base.html:93
+#: order/templates/order/sales_order_base.html:94
#: templates/js/translated/table_filters.js:312
#: templates/js/translated/table_filters.js:353
#: templates/js/translated/table_filters.js:383
@@ -1260,20 +1260,20 @@ msgstr ""
#: build/templates/build/build_base.html:163
#: build/templates/build/detail.html:67 build/templates/build/detail.html:142
-#: order/templates/order/sales_order_base.html:170
+#: order/templates/order/sales_order_base.html:171
#: templates/js/translated/table_filters.js:392
msgid "Completed"
msgstr ""
#: build/templates/build/build_base.html:176
-#: build/templates/build/detail.html:94 order/models.py:1073
-#: order/models.py:1169 order/models.py:1268
+#: build/templates/build/detail.html:94 order/models.py:1069
+#: order/models.py:1165 order/models.py:1273
#: order/templates/order/sales_order_base.html:9
#: order/templates/order/sales_order_base.html:28
#: report/templates/report/inventree_build_order_base.html:136
#: report/templates/report/inventree_so_report.html:77
#: stock/templates/stock/item_base.html:297
-#: templates/js/translated/order.js:2108
+#: templates/js/translated/order.js:2214
msgid "Sales Order"
msgstr ""
@@ -1308,8 +1308,8 @@ msgstr ""
msgid "Stock can be taken from any available location."
msgstr ""
-#: build/templates/build/detail.html:49 order/models.py:1009
-#: templates/js/translated/order.js:1200 templates/js/translated/order.js:1805
+#: build/templates/build/detail.html:49 order/models.py:1005
+#: templates/js/translated/order.js:1306 templates/js/translated/order.js:1911
msgid "Destination"
msgstr ""
@@ -1334,7 +1334,7 @@ msgstr ""
#: build/templates/build/detail.html:126
#: order/templates/order/order_base.html:149
-#: order/templates/order/sales_order_base.html:157
+#: order/templates/order/sales_order_base.html:158
#: templates/js/translated/build.js:2450
msgid "Created"
msgstr ""
@@ -1386,7 +1386,7 @@ msgstr ""
#: build/templates/build/detail.html:187
#: company/templates/company/detail.html:37
#: company/templates/company/detail.html:84
-#: part/templates/part/category.html:177 templates/js/translated/order.js:805
+#: part/templates/part/category.html:177 templates/js/translated/order.js:911
msgid "Order Parts"
msgstr ""
@@ -1516,23 +1516,23 @@ msgstr ""
msgid "Delete Build Order"
msgstr ""
-#: common/files.py:65
+#: common/files.py:66
msgid "Unsupported file format: {ext.upper()}"
msgstr ""
-#: common/files.py:67
+#: common/files.py:68
msgid "Error reading file (invalid encoding)"
msgstr ""
-#: common/files.py:72
+#: common/files.py:73
msgid "Error reading file (invalid format)"
msgstr ""
-#: common/files.py:74
+#: common/files.py:75
msgid "Error reading file (incorrect dimension)"
msgstr ""
-#: common/files.py:76
+#: common/files.py:77
msgid "Error reading file (data could be corrupted)"
msgstr ""
@@ -1553,888 +1553,888 @@ msgstr ""
msgid "Select {name} file to upload"
msgstr ""
-#: common/models.py:398
+#: common/models.py:394
msgid "Settings key (must be unique - case insensitive)"
msgstr ""
-#: common/models.py:400
+#: common/models.py:396
msgid "Settings value"
msgstr ""
-#: common/models.py:441
+#: common/models.py:437
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:461
+#: common/models.py:457
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:472
+#: common/models.py:468
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:521
+#: common/models.py:517
msgid "Key string must be unique"
msgstr ""
-#: common/models.py:743
+#: common/models.py:739
msgid "No group"
msgstr ""
-#: common/models.py:785
+#: common/models.py:781
msgid "Restart required"
msgstr ""
-#: common/models.py:786
+#: common/models.py:782
msgid "A setting has been changed which requires a server restart"
msgstr ""
-#: common/models.py:793
+#: common/models.py:789
msgid "Server Instance Name"
msgstr ""
-#: common/models.py:795
+#: common/models.py:791
msgid "String descriptor for the server instance"
msgstr ""
-#: common/models.py:799
+#: common/models.py:795
msgid "Use instance name"
msgstr ""
-#: common/models.py:800
+#: common/models.py:796
msgid "Use the instance name in the title-bar"
msgstr ""
-#: common/models.py:806
+#: common/models.py:802
msgid "Restrict showing `about`"
msgstr ""
-#: common/models.py:807
+#: common/models.py:803
msgid "Show the `about` modal only to superusers"
msgstr ""
-#: common/models.py:813 company/models.py:98 company/models.py:99
+#: common/models.py:809 company/models.py:92 company/models.py:93
msgid "Company name"
msgstr ""
-#: common/models.py:814
+#: common/models.py:810
msgid "Internal company name"
msgstr ""
-#: common/models.py:819
+#: common/models.py:815
msgid "Base URL"
msgstr ""
-#: common/models.py:820
+#: common/models.py:816
msgid "Base URL for server instance"
msgstr ""
-#: common/models.py:826
+#: common/models.py:822
msgid "Default Currency"
msgstr ""
-#: common/models.py:827
+#: common/models.py:823
msgid "Default currency"
msgstr ""
-#: common/models.py:833
+#: common/models.py:829
msgid "Download from URL"
msgstr ""
-#: common/models.py:834
+#: common/models.py:830
msgid "Allow download of remote images and files from external URL"
msgstr ""
-#: common/models.py:840 templates/InvenTree/settings/sidebar.html:33
+#: common/models.py:836 templates/InvenTree/settings/sidebar.html:33
msgid "Barcode Support"
msgstr ""
-#: common/models.py:841
+#: common/models.py:837
msgid "Enable barcode scanner support"
msgstr ""
-#: common/models.py:847
+#: common/models.py:843
msgid "Barcode Webcam Support"
msgstr ""
-#: common/models.py:848
+#: common/models.py:844
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/models.py:854
+#: common/models.py:850
msgid "IPN Regex"
msgstr ""
-#: common/models.py:855
+#: common/models.py:851
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/models.py:859
+#: common/models.py:855
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/models.py:860
+#: common/models.py:856
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/models.py:866
+#: common/models.py:862
msgid "Allow Editing IPN"
msgstr ""
-#: common/models.py:867
+#: common/models.py:863
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/models.py:873
+#: common/models.py:869
msgid "Copy Part BOM Data"
msgstr ""
-#: common/models.py:874
+#: common/models.py:870
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/models.py:880
+#: common/models.py:876
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/models.py:881
+#: common/models.py:877
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/models.py:887
+#: common/models.py:883
msgid "Copy Part Test Data"
msgstr ""
-#: common/models.py:888
+#: common/models.py:884
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/models.py:894
+#: common/models.py:890
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/models.py:895
+#: common/models.py:891
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/models.py:901 part/models.py:2593 report/models.py:180
+#: common/models.py:897 part/models.py:2581 report/models.py:175
#: templates/js/translated/table_filters.js:38
#: templates/js/translated/table_filters.js:444
msgid "Template"
msgstr ""
-#: common/models.py:902
+#: common/models.py:898
msgid "Parts are templates by default"
msgstr ""
-#: common/models.py:908 part/models.py:958 templates/js/translated/bom.js:1411
+#: common/models.py:904 part/models.py:946 templates/js/translated/bom.js:1411
#: templates/js/translated/table_filters.js:168
#: templates/js/translated/table_filters.js:460
msgid "Assembly"
msgstr ""
-#: common/models.py:909
+#: common/models.py:905
msgid "Parts can be assembled from other components by default"
msgstr ""
-#: common/models.py:915 part/models.py:964
+#: common/models.py:911 part/models.py:952
#: templates/js/translated/table_filters.js:464
msgid "Component"
msgstr ""
-#: common/models.py:916
+#: common/models.py:912
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/models.py:922 part/models.py:975
+#: common/models.py:918 part/models.py:963
msgid "Purchaseable"
msgstr ""
-#: common/models.py:923
+#: common/models.py:919
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/models.py:929 part/models.py:980
+#: common/models.py:925 part/models.py:968
#: templates/js/translated/table_filters.js:472
msgid "Salable"
msgstr ""
-#: common/models.py:930
+#: common/models.py:926
msgid "Parts are salable by default"
msgstr ""
-#: common/models.py:936 part/models.py:970
+#: common/models.py:932 part/models.py:958
#: templates/js/translated/table_filters.js:46
#: templates/js/translated/table_filters.js:100
#: templates/js/translated/table_filters.js:476
msgid "Trackable"
msgstr ""
-#: common/models.py:937
+#: common/models.py:933
msgid "Parts are trackable by default"
msgstr ""
-#: common/models.py:943 part/models.py:990
+#: common/models.py:939 part/models.py:978
#: part/templates/part/part_base.html:151
#: templates/js/translated/table_filters.js:42
msgid "Virtual"
msgstr ""
-#: common/models.py:944
+#: common/models.py:940
msgid "Parts are virtual by default"
msgstr ""
-#: common/models.py:950
+#: common/models.py:946
msgid "Show Import in Views"
msgstr ""
-#: common/models.py:951
+#: common/models.py:947
msgid "Display the import wizard in some part views"
msgstr ""
-#: common/models.py:957
+#: common/models.py:953
msgid "Show Price in Forms"
msgstr ""
-#: common/models.py:958
+#: common/models.py:954
msgid "Display part price in some forms"
msgstr ""
-#: common/models.py:969
+#: common/models.py:965
msgid "Show Price in BOM"
msgstr ""
-#: common/models.py:970
+#: common/models.py:966
msgid "Include pricing information in BOM tables"
msgstr ""
-#: common/models.py:981
+#: common/models.py:977
msgid "Show Price History"
msgstr ""
-#: common/models.py:982
+#: common/models.py:978
msgid "Display historical pricing for Part"
msgstr ""
-#: common/models.py:988
+#: common/models.py:984
msgid "Show related parts"
msgstr ""
-#: common/models.py:989
+#: common/models.py:985
msgid "Display related parts for a part"
msgstr ""
-#: common/models.py:995
+#: common/models.py:991
msgid "Create initial stock"
msgstr ""
-#: common/models.py:996
+#: common/models.py:992
msgid "Create initial stock on part creation"
msgstr ""
-#: common/models.py:1002
+#: common/models.py:998
msgid "Internal Prices"
msgstr ""
-#: common/models.py:1003
+#: common/models.py:999
msgid "Enable internal prices for parts"
msgstr ""
-#: common/models.py:1009
+#: common/models.py:1005
msgid "Internal Price as BOM-Price"
msgstr ""
-#: common/models.py:1010
+#: common/models.py:1006
msgid "Use the internal price (if set) in BOM-price calculations"
msgstr ""
-#: common/models.py:1016
+#: common/models.py:1012
msgid "Part Name Display Format"
msgstr ""
-#: common/models.py:1017
+#: common/models.py:1013
msgid "Format to display the part name"
msgstr ""
-#: common/models.py:1024
+#: common/models.py:1020
msgid "Enable Reports"
msgstr ""
-#: common/models.py:1025
+#: common/models.py:1021
msgid "Enable generation of reports"
msgstr ""
-#: common/models.py:1031 templates/stats.html:25
+#: common/models.py:1027 templates/stats.html:25
msgid "Debug Mode"
msgstr ""
-#: common/models.py:1032
+#: common/models.py:1028
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/models.py:1038
+#: common/models.py:1034
msgid "Page Size"
msgstr ""
-#: common/models.py:1039
+#: common/models.py:1035
msgid "Default page size for PDF reports"
msgstr ""
-#: common/models.py:1049
+#: common/models.py:1045
msgid "Test Reports"
msgstr ""
-#: common/models.py:1050
+#: common/models.py:1046
msgid "Enable generation of test reports"
msgstr ""
-#: common/models.py:1056
+#: common/models.py:1052
msgid "Batch Code Template"
msgstr ""
-#: common/models.py:1057
+#: common/models.py:1053
msgid "Template for generating default batch codes for stock items"
msgstr ""
-#: common/models.py:1062
+#: common/models.py:1058
msgid "Stock Expiry"
msgstr ""
-#: common/models.py:1063
+#: common/models.py:1059
msgid "Enable stock expiry functionality"
msgstr ""
-#: common/models.py:1069
+#: common/models.py:1065
msgid "Sell Expired Stock"
msgstr ""
-#: common/models.py:1070
+#: common/models.py:1066
msgid "Allow sale of expired stock"
msgstr ""
-#: common/models.py:1076
+#: common/models.py:1072
msgid "Stock Stale Time"
msgstr ""
-#: common/models.py:1077
+#: common/models.py:1073
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/models.py:1079
+#: common/models.py:1075
msgid "days"
msgstr ""
-#: common/models.py:1084
+#: common/models.py:1080
msgid "Build Expired Stock"
msgstr ""
-#: common/models.py:1085
+#: common/models.py:1081
msgid "Allow building with expired stock"
msgstr ""
-#: common/models.py:1091
+#: common/models.py:1087
msgid "Stock Ownership Control"
msgstr ""
-#: common/models.py:1092
+#: common/models.py:1088
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/models.py:1098
+#: common/models.py:1094
msgid "Build Order Reference Prefix"
msgstr ""
-#: common/models.py:1099
+#: common/models.py:1095
msgid "Prefix value for build order reference"
msgstr ""
-#: common/models.py:1104
+#: common/models.py:1100
msgid "Build Order Reference Regex"
msgstr ""
-#: common/models.py:1105
+#: common/models.py:1101
msgid "Regular expression pattern for matching build order reference"
msgstr ""
-#: common/models.py:1109
+#: common/models.py:1105
msgid "Sales Order Reference Prefix"
msgstr ""
-#: common/models.py:1110
+#: common/models.py:1106
msgid "Prefix value for sales order reference"
msgstr ""
-#: common/models.py:1115
+#: common/models.py:1111
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/models.py:1116
+#: common/models.py:1112
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/models.py:1122
+#: common/models.py:1118
msgid "Purchase Order Reference Prefix"
msgstr ""
-#: common/models.py:1123
+#: common/models.py:1119
msgid "Prefix value for purchase order reference"
msgstr ""
-#: common/models.py:1129
+#: common/models.py:1125
msgid "Enable password forgot"
msgstr ""
-#: common/models.py:1130
+#: common/models.py:1126
msgid "Enable password forgot function on the login pages"
msgstr ""
-#: common/models.py:1136
+#: common/models.py:1132
msgid "Enable registration"
msgstr ""
-#: common/models.py:1137
+#: common/models.py:1133
msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/models.py:1143
+#: common/models.py:1139
msgid "Enable SSO"
msgstr ""
-#: common/models.py:1144
+#: common/models.py:1140
msgid "Enable SSO on the login pages"
msgstr ""
-#: common/models.py:1150
+#: common/models.py:1146
msgid "Email required"
msgstr ""
-#: common/models.py:1151
+#: common/models.py:1147
msgid "Require user to supply mail on signup"
msgstr ""
-#: common/models.py:1157
+#: common/models.py:1153
msgid "Auto-fill SSO users"
msgstr ""
-#: common/models.py:1158
+#: common/models.py:1154
msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
-#: common/models.py:1164
+#: common/models.py:1160
msgid "Mail twice"
msgstr ""
-#: common/models.py:1165
+#: common/models.py:1161
msgid "On signup ask users twice for their mail"
msgstr ""
-#: common/models.py:1171
+#: common/models.py:1167
msgid "Password twice"
msgstr ""
-#: common/models.py:1172
+#: common/models.py:1168
msgid "On signup ask users twice for their password"
msgstr ""
-#: common/models.py:1178
+#: common/models.py:1174
msgid "Group on signup"
msgstr ""
-#: common/models.py:1179
+#: common/models.py:1175
msgid "Group to which new users are assigned on registration"
msgstr ""
-#: common/models.py:1185
+#: common/models.py:1181
msgid "Enforce MFA"
msgstr ""
-#: common/models.py:1186
+#: common/models.py:1182
msgid "Users must use multifactor security."
msgstr ""
-#: common/models.py:1192
+#: common/models.py:1188
msgid "Check plugins on startup"
msgstr ""
-#: common/models.py:1193
+#: common/models.py:1189
msgid "Check that all plugins are installed on startup - enable in container enviroments"
msgstr ""
-#: common/models.py:1201
+#: common/models.py:1197
msgid "Enable URL integration"
msgstr ""
-#: common/models.py:1202
+#: common/models.py:1198
msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/models.py:1209
+#: common/models.py:1205
msgid "Enable navigation integration"
msgstr ""
-#: common/models.py:1210
+#: common/models.py:1206
msgid "Enable plugins to integrate into navigation"
msgstr ""
-#: common/models.py:1217
+#: common/models.py:1213
msgid "Enable app integration"
msgstr ""
-#: common/models.py:1218
+#: common/models.py:1214
msgid "Enable plugins to add apps"
msgstr ""
-#: common/models.py:1225
+#: common/models.py:1221
msgid "Enable schedule integration"
msgstr ""
-#: common/models.py:1226
+#: common/models.py:1222
msgid "Enable plugins to run scheduled tasks"
msgstr ""
-#: common/models.py:1233
+#: common/models.py:1229
msgid "Enable event integration"
msgstr ""
-#: common/models.py:1234
+#: common/models.py:1230
msgid "Enable plugins to respond to internal events"
msgstr ""
-#: common/models.py:1249 common/models.py:1564
+#: common/models.py:1245 common/models.py:1560
msgid "Settings key (must be unique - case insensitive"
msgstr ""
-#: common/models.py:1280
+#: common/models.py:1276
msgid "Show subscribed parts"
msgstr ""
-#: common/models.py:1281
+#: common/models.py:1277
msgid "Show subscribed parts on the homepage"
msgstr ""
-#: common/models.py:1287
+#: common/models.py:1283
msgid "Show subscribed categories"
msgstr ""
-#: common/models.py:1288
+#: common/models.py:1284
msgid "Show subscribed part categories on the homepage"
msgstr ""
-#: common/models.py:1294
+#: common/models.py:1290
msgid "Show latest parts"
msgstr ""
-#: common/models.py:1295
+#: common/models.py:1291
msgid "Show latest parts on the homepage"
msgstr ""
-#: common/models.py:1301
+#: common/models.py:1297
msgid "Recent Part Count"
msgstr ""
-#: common/models.py:1302
+#: common/models.py:1298
msgid "Number of recent parts to display on index page"
msgstr ""
-#: common/models.py:1308
+#: common/models.py:1304
msgid "Show unvalidated BOMs"
msgstr ""
-#: common/models.py:1309
+#: common/models.py:1305
msgid "Show BOMs that await validation on the homepage"
msgstr ""
-#: common/models.py:1315
+#: common/models.py:1311
msgid "Show recent stock changes"
msgstr ""
-#: common/models.py:1316
+#: common/models.py:1312
msgid "Show recently changed stock items on the homepage"
msgstr ""
-#: common/models.py:1322
+#: common/models.py:1318
msgid "Recent Stock Count"
msgstr ""
-#: common/models.py:1323
+#: common/models.py:1319
msgid "Number of recent stock items to display on index page"
msgstr ""
-#: common/models.py:1329
+#: common/models.py:1325
msgid "Show low stock"
msgstr ""
-#: common/models.py:1330
+#: common/models.py:1326
msgid "Show low stock items on the homepage"
msgstr ""
-#: common/models.py:1336
+#: common/models.py:1332
msgid "Show depleted stock"
msgstr ""
-#: common/models.py:1337
+#: common/models.py:1333
msgid "Show depleted stock items on the homepage"
msgstr ""
-#: common/models.py:1343
+#: common/models.py:1339
msgid "Show needed stock"
msgstr ""
-#: common/models.py:1344
+#: common/models.py:1340
msgid "Show stock items needed for builds on the homepage"
msgstr ""
-#: common/models.py:1350
+#: common/models.py:1346
msgid "Show expired stock"
msgstr ""
-#: common/models.py:1351
+#: common/models.py:1347
msgid "Show expired stock items on the homepage"
msgstr ""
-#: common/models.py:1357
+#: common/models.py:1353
msgid "Show stale stock"
msgstr ""
-#: common/models.py:1358
+#: common/models.py:1354
msgid "Show stale stock items on the homepage"
msgstr ""
-#: common/models.py:1364
+#: common/models.py:1360
msgid "Show pending builds"
msgstr ""
-#: common/models.py:1365
+#: common/models.py:1361
msgid "Show pending builds on the homepage"
msgstr ""
-#: common/models.py:1371
+#: common/models.py:1367
msgid "Show overdue builds"
msgstr ""
-#: common/models.py:1372
+#: common/models.py:1368
msgid "Show overdue builds on the homepage"
msgstr ""
-#: common/models.py:1378
+#: common/models.py:1374
msgid "Show outstanding POs"
msgstr ""
-#: common/models.py:1379
+#: common/models.py:1375
msgid "Show outstanding POs on the homepage"
msgstr ""
-#: common/models.py:1385
+#: common/models.py:1381
msgid "Show overdue POs"
msgstr ""
-#: common/models.py:1386
+#: common/models.py:1382
msgid "Show overdue POs on the homepage"
msgstr ""
-#: common/models.py:1392
+#: common/models.py:1388
msgid "Show outstanding SOs"
msgstr ""
-#: common/models.py:1393
+#: common/models.py:1389
msgid "Show outstanding SOs on the homepage"
msgstr ""
-#: common/models.py:1399
+#: common/models.py:1395
msgid "Show overdue SOs"
msgstr ""
-#: common/models.py:1400
+#: common/models.py:1396
msgid "Show overdue SOs on the homepage"
msgstr ""
-#: common/models.py:1405
+#: common/models.py:1401
msgid "Enable label printing"
msgstr ""
-#: common/models.py:1406
+#: common/models.py:1402
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/models.py:1412
+#: common/models.py:1408
msgid "Inline label display"
msgstr ""
-#: common/models.py:1413
+#: common/models.py:1409
msgid "Display PDF labels in the browser, instead of downloading as a file"
msgstr ""
-#: common/models.py:1419
+#: common/models.py:1415
msgid "Inline report display"
msgstr ""
-#: common/models.py:1420
+#: common/models.py:1416
msgid "Display PDF reports in the browser, instead of downloading as a file"
msgstr ""
-#: common/models.py:1426
+#: common/models.py:1422
msgid "Search Parts"
msgstr ""
-#: common/models.py:1427
+#: common/models.py:1423
msgid "Display parts in search preview window"
msgstr ""
-#: common/models.py:1433
+#: common/models.py:1429
msgid "Hide Inactive Parts"
msgstr ""
-#: common/models.py:1434
+#: common/models.py:1430
msgid "Excluded inactive parts from search preview window"
msgstr ""
-#: common/models.py:1440
+#: common/models.py:1436
msgid "Search Categories"
msgstr ""
-#: common/models.py:1441
+#: common/models.py:1437
msgid "Display part categories in search preview window"
msgstr ""
-#: common/models.py:1447
+#: common/models.py:1443
msgid "Search Stock"
msgstr ""
-#: common/models.py:1448
+#: common/models.py:1444
msgid "Display stock items in search preview window"
msgstr ""
-#: common/models.py:1454
+#: common/models.py:1450
msgid "Hide Unavailable Stock Items"
msgstr ""
-#: common/models.py:1455
+#: common/models.py:1451
msgid "Exclude stock items which are not available from the search preview window"
msgstr ""
-#: common/models.py:1461
+#: common/models.py:1457
msgid "Search Locations"
msgstr ""
-#: common/models.py:1462
+#: common/models.py:1458
msgid "Display stock locations in search preview window"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1464
msgid "Search Companies"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1465
msgid "Display companies in search preview window"
msgstr ""
-#: common/models.py:1475
+#: common/models.py:1471
msgid "Search Purchase Orders"
msgstr ""
-#: common/models.py:1476
+#: common/models.py:1472
msgid "Display purchase orders in search preview window"
msgstr ""
-#: common/models.py:1482
+#: common/models.py:1478
msgid "Exclude Inactive Purchase Orders"
msgstr ""
-#: common/models.py:1483
+#: common/models.py:1479
msgid "Exclude inactive purchase orders from search preview window"
msgstr ""
-#: common/models.py:1489
+#: common/models.py:1485
msgid "Search Sales Orders"
msgstr ""
-#: common/models.py:1490
+#: common/models.py:1486
msgid "Display sales orders in search preview window"
msgstr ""
-#: common/models.py:1496
+#: common/models.py:1492
msgid "Exclude Inactive Sales Orders"
msgstr ""
-#: common/models.py:1497
+#: common/models.py:1493
msgid "Exclude inactive sales orders from search preview window"
msgstr ""
-#: common/models.py:1503
+#: common/models.py:1499
msgid "Search Preview Results"
msgstr ""
-#: common/models.py:1504
+#: common/models.py:1500
msgid "Number of results to show in each section of the search preview window"
msgstr ""
-#: common/models.py:1510
+#: common/models.py:1506
msgid "Show Quantity in Forms"
msgstr ""
-#: common/models.py:1511
+#: common/models.py:1507
msgid "Display available part quantity in some forms"
msgstr ""
-#: common/models.py:1517
+#: common/models.py:1513
msgid "Escape Key Closes Forms"
msgstr ""
-#: common/models.py:1518
+#: common/models.py:1514
msgid "Use the escape key to close modal forms"
msgstr ""
-#: common/models.py:1524
+#: common/models.py:1520
msgid "Fixed Navbar"
msgstr ""
-#: common/models.py:1525
+#: common/models.py:1521
msgid "The navbar position is fixed to the top of the screen"
msgstr ""
-#: common/models.py:1531
+#: common/models.py:1527
msgid "Date Format"
msgstr ""
-#: common/models.py:1532
+#: common/models.py:1528
msgid "Preferred format for displaying dates"
msgstr ""
-#: common/models.py:1546 part/templates/part/detail.html:39
+#: common/models.py:1542 part/templates/part/detail.html:39
msgid "Part Scheduling"
msgstr ""
-#: common/models.py:1547
+#: common/models.py:1543
msgid "Display part scheduling information"
msgstr ""
-#: common/models.py:1615 company/forms.py:40
+#: common/models.py:1611 company/forms.py:39
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1622 company/serializers.py:288
-#: company/templates/company/supplier_part.html:263 order/models.py:921
+#: common/models.py:1618 company/serializers.py:285
+#: company/templates/company/supplier_part.html:263 order/models.py:917
#: templates/js/translated/part.js:998 templates/js/translated/part.js:1974
msgid "Price"
msgstr ""
-#: common/models.py:1623
+#: common/models.py:1619
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1783 common/models.py:1920
+#: common/models.py:1779 common/models.py:1916
msgid "Endpoint"
msgstr ""
-#: common/models.py:1784
+#: common/models.py:1780
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1793
+#: common/models.py:1789
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1798 part/models.py:985 plugin/models.py:106
+#: common/models.py:1794 part/models.py:973 plugin/models.py:105
#: templates/js/translated/table_filters.js:34
#: templates/js/translated/table_filters.js:96
#: templates/js/translated/table_filters.js:308
@@ -2442,79 +2442,79 @@ msgstr ""
msgid "Active"
msgstr ""
-#: common/models.py:1799
+#: common/models.py:1795
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1813
+#: common/models.py:1809
msgid "Token"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1810
msgid "Token for access"
msgstr ""
-#: common/models.py:1821
+#: common/models.py:1817
msgid "Secret"
msgstr ""
-#: common/models.py:1822
+#: common/models.py:1818
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1887
+#: common/models.py:1883
msgid "Message ID"
msgstr ""
-#: common/models.py:1888
+#: common/models.py:1884
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1896
+#: common/models.py:1892
msgid "Host"
msgstr ""
-#: common/models.py:1897
+#: common/models.py:1893
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1904
+#: common/models.py:1900
msgid "Header"
msgstr ""
-#: common/models.py:1905
+#: common/models.py:1901
msgid "Header of this message"
msgstr ""
-#: common/models.py:1911
+#: common/models.py:1907
msgid "Body"
msgstr ""
-#: common/models.py:1912
+#: common/models.py:1908
msgid "Body of this message"
msgstr ""
-#: common/models.py:1921
+#: common/models.py:1917
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1926
+#: common/models.py:1922
msgid "Worked on"
msgstr ""
-#: common/models.py:1927
+#: common/models.py:1923
msgid "Was the work on this message finished?"
msgstr ""
#: common/views.py:90 order/templates/order/purchase_order_detail.html:23
-#: order/views.py:119 part/views.py:205
+#: order/views.py:115 part/views.py:194
#: templates/patterns/wizard/upload.html:37
msgid "Upload File"
msgstr ""
-#: common/views.py:91 order/views.py:120
+#: common/views.py:91 order/views.py:116
#: part/templates/part/import_wizard/ajax_match_fields.html:45
-#: part/views.py:206 templates/patterns/wizard/match_fields.html:51
+#: part/views.py:195 templates/patterns/wizard/match_fields.html:51
msgid "Match Fields"
msgstr ""
@@ -2537,118 +2537,118 @@ msgstr ""
msgid "Previous Step"
msgstr ""
-#: company/forms.py:21 part/forms.py:43
+#: company/forms.py:20 part/forms.py:41
#: templates/InvenTree/settings/mixins/urls.html:14
msgid "URL"
msgstr ""
-#: company/forms.py:22 part/forms.py:44
+#: company/forms.py:21 part/forms.py:42
msgid "Image URL"
msgstr ""
-#: company/models.py:103
+#: company/models.py:97
msgid "Company description"
msgstr ""
-#: company/models.py:104
+#: company/models.py:98
msgid "Description of the company"
msgstr ""
-#: company/models.py:110 company/templates/company/company_base.html:100
+#: company/models.py:104 company/templates/company/company_base.html:100
#: templates/InvenTree/settings/plugin_settings.html:55
#: templates/js/translated/company.js:349
msgid "Website"
msgstr ""
-#: company/models.py:111
+#: company/models.py:105
msgid "Company website URL"
msgstr ""
-#: company/models.py:115 company/templates/company/company_base.html:118
+#: company/models.py:109 company/templates/company/company_base.html:118
msgid "Address"
msgstr ""
-#: company/models.py:116
+#: company/models.py:110
msgid "Company address"
msgstr ""
-#: company/models.py:119
+#: company/models.py:113
msgid "Phone number"
msgstr ""
-#: company/models.py:120
+#: company/models.py:114
msgid "Contact phone number"
msgstr ""
-#: company/models.py:123 company/templates/company/company_base.html:132
+#: company/models.py:117 company/templates/company/company_base.html:132
#: templates/InvenTree/settings/user.html:48
msgid "Email"
msgstr ""
-#: company/models.py:123
+#: company/models.py:117
msgid "Contact email address"
msgstr ""
-#: company/models.py:126 company/templates/company/company_base.html:139
+#: company/models.py:120 company/templates/company/company_base.html:139
msgid "Contact"
msgstr ""
-#: company/models.py:127
+#: company/models.py:121
msgid "Point of contact"
msgstr ""
-#: company/models.py:129
+#: company/models.py:123
msgid "Link to external company information"
msgstr ""
-#: company/models.py:137 part/models.py:877
+#: company/models.py:131 part/models.py:865
msgid "Image"
msgstr ""
-#: company/models.py:142
+#: company/models.py:136
msgid "is customer"
msgstr ""
-#: company/models.py:142
+#: company/models.py:136
msgid "Do you sell items to this company?"
msgstr ""
-#: company/models.py:144
+#: company/models.py:138
msgid "is supplier"
msgstr ""
-#: company/models.py:144
+#: company/models.py:138
msgid "Do you purchase items from this company?"
msgstr ""
-#: company/models.py:146
+#: company/models.py:140
msgid "is manufacturer"
msgstr ""
-#: company/models.py:146
+#: company/models.py:140
msgid "Does this company manufacture parts?"
msgstr ""
-#: company/models.py:150 company/serializers.py:294
-#: company/templates/company/company_base.html:106 part/serializers.py:156
-#: part/serializers.py:188 stock/serializers.py:176
+#: company/models.py:144 company/serializers.py:291
+#: company/templates/company/company_base.html:106 part/serializers.py:151
+#: part/serializers.py:183 stock/serializers.py:168
msgid "Currency"
msgstr ""
-#: company/models.py:153
+#: company/models.py:147
msgid "Default currency used for this company"
msgstr ""
-#: company/models.py:315 company/models.py:546 stock/models.py:616
+#: company/models.py:309 company/models.py:540 stock/models.py:607
#: stock/templates/stock/item_base.html:148 templates/js/translated/bom.js:542
msgid "Base Part"
msgstr ""
-#: company/models.py:319 company/models.py:550
+#: company/models.py:313 company/models.py:544
msgid "Select part"
msgstr ""
-#: company/models.py:330 company/templates/company/company_base.html:76
+#: company/models.py:324 company/templates/company/company_base.html:76
#: company/templates/company/manufacturer_part.html:90
#: company/templates/company/supplier_part.html:103
#: stock/templates/stock/item_base.html:370
@@ -2659,146 +2659,146 @@ msgstr ""
msgid "Manufacturer"
msgstr ""
-#: company/models.py:331 templates/js/translated/part.js:236
+#: company/models.py:325 templates/js/translated/part.js:236
msgid "Select manufacturer"
msgstr ""
-#: company/models.py:337 company/templates/company/manufacturer_part.html:101
+#: company/models.py:331 company/templates/company/manufacturer_part.html:101
#: company/templates/company/supplier_part.html:111
#: templates/js/translated/company.js:533
-#: templates/js/translated/company.js:818 templates/js/translated/order.js:1683
+#: templates/js/translated/company.js:818 templates/js/translated/order.js:1789
#: templates/js/translated/part.js:246 templates/js/translated/part.js:956
msgid "MPN"
msgstr ""
-#: company/models.py:338 templates/js/translated/part.js:247
+#: company/models.py:332 templates/js/translated/part.js:247
msgid "Manufacturer Part Number"
msgstr ""
-#: company/models.py:344
+#: company/models.py:338
msgid "URL for external manufacturer part link"
msgstr ""
-#: company/models.py:350
+#: company/models.py:344
msgid "Manufacturer part description"
msgstr ""
-#: company/models.py:397 company/models.py:420 company/models.py:569
+#: company/models.py:391 company/models.py:414 company/models.py:563
#: company/templates/company/manufacturer_part.html:7
#: company/templates/company/manufacturer_part.html:24
#: stock/templates/stock/item_base.html:380
msgid "Manufacturer Part"
msgstr ""
-#: company/models.py:427
+#: company/models.py:421
msgid "Parameter name"
msgstr ""
-#: company/models.py:433
+#: company/models.py:427
#: report/templates/report/inventree_test_report_base.html:95
-#: stock/models.py:2204 templates/js/translated/company.js:647
+#: stock/models.py:2195 templates/js/translated/company.js:647
#: templates/js/translated/part.js:776 templates/js/translated/stock.js:1304
msgid "Value"
msgstr ""
-#: company/models.py:434
+#: company/models.py:428
msgid "Parameter value"
msgstr ""
-#: company/models.py:440 part/models.py:952 part/models.py:2561
+#: company/models.py:434 part/models.py:940 part/models.py:2549
#: part/templates/part/part_base.html:280
#: templates/InvenTree/settings/settings.html:332
#: templates/js/translated/company.js:653 templates/js/translated/part.js:782
msgid "Units"
msgstr ""
-#: company/models.py:441
+#: company/models.py:435
msgid "Parameter units"
msgstr ""
-#: company/models.py:513
+#: company/models.py:507
msgid "Linked manufacturer part must reference the same base part"
msgstr ""
-#: company/models.py:556 company/templates/company/company_base.html:81
-#: company/templates/company/supplier_part.html:87 order/models.py:256
+#: company/models.py:550 company/templates/company/company_base.html:81
+#: company/templates/company/supplier_part.html:87 order/models.py:252
#: order/templates/order/order_base.html:112 part/bom.py:237 part/bom.py:265
#: stock/templates/stock/item_base.html:387
#: templates/js/translated/company.js:337
-#: templates/js/translated/company.js:774 templates/js/translated/order.js:1443
+#: templates/js/translated/company.js:774 templates/js/translated/order.js:1549
#: templates/js/translated/part.js:216 templates/js/translated/part.js:924
#: templates/js/translated/table_filters.js:415
msgid "Supplier"
msgstr ""
-#: company/models.py:557 templates/js/translated/part.js:217
+#: company/models.py:551 templates/js/translated/part.js:217
msgid "Select supplier"
msgstr ""
-#: company/models.py:562 company/templates/company/supplier_part.html:97
-#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1670
+#: company/models.py:556 company/templates/company/supplier_part.html:97
+#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1776
#: templates/js/translated/part.js:227 templates/js/translated/part.js:942
msgid "SKU"
msgstr ""
-#: company/models.py:563 templates/js/translated/part.js:228
+#: company/models.py:557 templates/js/translated/part.js:228
msgid "Supplier stock keeping unit"
msgstr ""
-#: company/models.py:570
+#: company/models.py:564
msgid "Select manufacturer part"
msgstr ""
-#: company/models.py:576
+#: company/models.py:570
msgid "URL for external supplier part link"
msgstr ""
-#: company/models.py:582
+#: company/models.py:576
msgid "Supplier part description"
msgstr ""
-#: company/models.py:587 company/templates/company/supplier_part.html:125
-#: part/models.py:2800 part/templates/part/upload_bom.html:59
+#: company/models.py:581 company/templates/company/supplier_part.html:125
+#: part/models.py:2788 part/templates/part/upload_bom.html:59
#: report/templates/report/inventree_po_report.html:92
-#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:406
+#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:398
msgid "Note"
msgstr ""
-#: company/models.py:591 part/models.py:1870
+#: company/models.py:585 part/models.py:1858
msgid "base cost"
msgstr ""
-#: company/models.py:591 part/models.py:1870
+#: company/models.py:585 part/models.py:1858
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:593 company/templates/company/supplier_part.html:118
-#: stock/models.py:640 stock/templates/stock/item_base.html:328
+#: company/models.py:587 company/templates/company/supplier_part.html:118
+#: stock/models.py:631 stock/templates/stock/item_base.html:328
#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1918
msgid "Packaging"
msgstr ""
-#: company/models.py:593
+#: company/models.py:587
msgid "Part packaging"
msgstr ""
-#: company/models.py:595 part/models.py:1872
+#: company/models.py:589 part/models.py:1860
msgid "multiple"
msgstr ""
-#: company/models.py:595
+#: company/models.py:589
msgid "Order multiple"
msgstr ""
-#: company/models.py:719
+#: company/models.py:713
msgid "last updated"
msgstr ""
-#: company/serializers.py:71
+#: company/serializers.py:68
msgid "Default currency used for this supplier"
msgstr ""
-#: company/serializers.py:72
+#: company/serializers.py:69
msgid "Currency Code"
msgstr ""
@@ -2809,7 +2809,7 @@ msgid "Company"
msgstr ""
#: company/templates/company/company_base.html:22
-#: templates/js/translated/order.js:416
+#: templates/js/translated/order.js:522
msgid "Create Purchase Order"
msgstr ""
@@ -2845,11 +2845,11 @@ msgstr ""
msgid "Download image from URL"
msgstr ""
-#: company/templates/company/company_base.html:86 order/models.py:604
-#: order/templates/order/sales_order_base.html:115 stock/models.py:659
-#: stock/models.py:660 stock/serializers.py:722
+#: company/templates/company/company_base.html:86 order/models.py:600
+#: order/templates/order/sales_order_base.html:116 stock/models.py:650
+#: stock/models.py:651 stock/serializers.py:714
#: stock/templates/stock/item_base.html:280
-#: templates/js/translated/company.js:329 templates/js/translated/order.js:2130
+#: templates/js/translated/company.js:329 templates/js/translated/order.js:2236
#: templates/js/translated/stock.js:2436
#: templates/js/translated/table_filters.js:419
msgid "Customer"
@@ -2935,7 +2935,7 @@ msgstr ""
#: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197
#: templates/InvenTree/settings/sidebar.html:47
#: templates/js/translated/search.js:190 templates/navbar.html:50
-#: users/models.py:45
+#: users/models.py:43
msgid "Purchase Orders"
msgstr ""
@@ -2958,7 +2958,7 @@ msgstr ""
#: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217
#: templates/InvenTree/settings/sidebar.html:49
#: templates/js/translated/search.js:214 templates/navbar.html:61
-#: users/models.py:46
+#: users/models.py:44
msgid "Sales Orders"
msgstr ""
@@ -2997,7 +2997,7 @@ msgstr ""
msgid "Supplier List"
msgstr ""
-#: company/templates/company/manufacturer_part.html:15 company/views.py:52
+#: company/templates/company/manufacturer_part.html:15 company/views.py:47
#: part/templates/part/prices.html:170 templates/InvenTree/search.html:178
#: templates/navbar.html:49
msgid "Manufacturers"
@@ -3030,7 +3030,7 @@ msgid "No manufacturer information available"
msgstr ""
#: company/templates/company/manufacturer_part.html:119
-#: company/templates/company/supplier_part.html:15 company/views.py:46
+#: company/templates/company/supplier_part.html:15 company/views.py:41
#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:166
#: templates/InvenTree/search.html:188 templates/navbar.html:48
msgid "Suppliers"
@@ -3046,7 +3046,7 @@ msgstr ""
#: company/templates/company/manufacturer_part.html:303
#: part/templates/part/detail.html:363 part/templates/part/detail.html:392
#: templates/js/translated/bom.js:699 templates/js/translated/company.js:426
-#: templates/js/translated/helpers.js:32 users/models.py:222
+#: templates/js/translated/helpers.js:32 users/models.py:220
msgid "Delete"
msgstr ""
@@ -3098,9 +3098,9 @@ msgid "Assigned Stock Items"
msgstr ""
#: company/templates/company/supplier_part.html:7
-#: company/templates/company/supplier_part.html:24 stock/models.py:624
+#: company/templates/company/supplier_part.html:24 stock/models.py:615
#: stock/templates/stock/item_base.html:396
-#: templates/js/translated/company.js:790 templates/js/translated/order.js:763
+#: templates/js/translated/company.js:790 templates/js/translated/order.js:869
#: templates/js/translated/stock.js:1875
msgid "Supplier Part"
msgstr ""
@@ -3217,536 +3217,532 @@ msgstr ""
#: stock/templates/stock/location.html:173
#: stock/templates/stock/location_sidebar.html:7
#: templates/InvenTree/search.html:152 templates/js/translated/search.js:138
-#: templates/js/translated/stock.js:2312 users/models.py:43
+#: templates/js/translated/stock.js:2312 users/models.py:41
msgid "Stock Items"
msgstr ""
-#: company/views.py:47
+#: company/views.py:42
msgid "New Supplier"
msgstr ""
-#: company/views.py:53
+#: company/views.py:48
msgid "New Manufacturer"
msgstr ""
-#: company/views.py:58 templates/InvenTree/search.html:208
+#: company/views.py:53 templates/InvenTree/search.html:208
#: templates/navbar.html:60
msgid "Customers"
msgstr ""
-#: company/views.py:59
+#: company/views.py:54
msgid "New Customer"
msgstr ""
-#: company/views.py:66 templates/js/translated/search.js:167
+#: company/views.py:61 templates/js/translated/search.js:167
msgid "Companies"
msgstr ""
-#: company/views.py:67
+#: company/views.py:62
msgid "New Company"
msgstr ""
-#: company/views.py:126 part/views.py:590
+#: company/views.py:121 part/views.py:579
msgid "Download Image"
msgstr ""
-#: company/views.py:155 part/views.py:622
+#: company/views.py:150 part/views.py:611
msgid "Image size exceeds maximum allowable size for download"
msgstr ""
-#: company/views.py:162 part/views.py:629
+#: company/views.py:157 part/views.py:618
#, python-brace-format
msgid "Invalid response: {code}"
msgstr ""
-#: company/views.py:171 part/views.py:638
+#: company/views.py:166 part/views.py:627
msgid "Supplied URL is not a valid image file"
msgstr ""
-#: label/api.py:94 report/api.py:201
-msgid "No valid objects provided to template"
-msgstr ""
-
-#: label/models.py:110
+#: label/models.py:105
msgid "Label name"
msgstr ""
-#: label/models.py:117
+#: label/models.py:112
msgid "Label description"
msgstr ""
-#: label/models.py:124
+#: label/models.py:119
msgid "Label"
msgstr ""
-#: label/models.py:125
+#: label/models.py:120
msgid "Label template file"
msgstr ""
-#: label/models.py:131 report/models.py:291
+#: label/models.py:126 report/models.py:286
msgid "Enabled"
msgstr ""
-#: label/models.py:132
+#: label/models.py:127
msgid "Label template is enabled"
msgstr ""
-#: label/models.py:137
+#: label/models.py:132
msgid "Width [mm]"
msgstr ""
-#: label/models.py:138
+#: label/models.py:133
msgid "Label width, specified in mm"
msgstr ""
-#: label/models.py:144
+#: label/models.py:139
msgid "Height [mm]"
msgstr ""
-#: label/models.py:145
+#: label/models.py:140
msgid "Label height, specified in mm"
msgstr ""
-#: label/models.py:151 report/models.py:284
+#: label/models.py:146 report/models.py:279
msgid "Filename Pattern"
msgstr ""
-#: label/models.py:152
+#: label/models.py:147
msgid "Pattern for generating label filenames"
msgstr ""
-#: label/models.py:255
+#: label/models.py:250
msgid "Query filters (comma-separated list of key=value pairs),"
msgstr ""
-#: label/models.py:256 label/models.py:316 label/models.py:363
-#: report/models.py:315 report/models.py:452 report/models.py:491
+#: label/models.py:251 label/models.py:295 label/models.py:327
+#: report/models.py:310 report/models.py:447 report/models.py:486
msgid "Filters"
msgstr ""
-#: label/models.py:315
+#: label/models.py:294
msgid "Query filters (comma-separated list of key=value pairs"
msgstr ""
-#: label/models.py:362
+#: label/models.py:326
msgid "Part query filters (comma-separated value of key=value pairs)"
msgstr ""
-#: order/models.py:134
+#: order/models.py:130
msgid "Order description"
msgstr ""
-#: order/models.py:136
+#: order/models.py:132
msgid "Link to external page"
msgstr ""
-#: order/models.py:144
+#: order/models.py:140
msgid "Created By"
msgstr ""
-#: order/models.py:151
+#: order/models.py:147
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:156
+#: order/models.py:152
msgid "Order notes"
msgstr ""
-#: order/models.py:242 order/models.py:594
+#: order/models.py:238 order/models.py:590
msgid "Order reference"
msgstr ""
-#: order/models.py:247 order/models.py:609
+#: order/models.py:243 order/models.py:605
msgid "Purchase order status"
msgstr ""
-#: order/models.py:257
+#: order/models.py:253
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:260 order/templates/order/order_base.html:124
-#: templates/js/translated/order.js:1452
+#: order/models.py:256 order/templates/order/order_base.html:124
+#: templates/js/translated/order.js:1558
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:260
+#: order/models.py:256
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:267
+#: order/models.py:263
msgid "received by"
msgstr ""
-#: order/models.py:272
+#: order/models.py:268
msgid "Issue Date"
msgstr ""
-#: order/models.py:273
+#: order/models.py:269
msgid "Date order was issued"
msgstr ""
-#: order/models.py:278
+#: order/models.py:274
msgid "Target Delivery Date"
msgstr ""
-#: order/models.py:279
+#: order/models.py:275
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:285
+#: order/models.py:281
msgid "Date order was completed"
msgstr ""
-#: order/models.py:314
+#: order/models.py:310
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:460
+#: order/models.py:456
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:605
+#: order/models.py:601
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:611
+#: order/models.py:607
msgid "Customer Reference "
msgstr ""
-#: order/models.py:611
+#: order/models.py:607
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:616
+#: order/models.py:612
msgid "Target date for order completion. Order will be overdue after this date."
msgstr ""
-#: order/models.py:619 order/models.py:1174
-#: templates/js/translated/order.js:2177 templates/js/translated/order.js:2328
+#: order/models.py:615 order/models.py:1170
+#: templates/js/translated/order.js:2283 templates/js/translated/order.js:2434
msgid "Shipment Date"
msgstr ""
-#: order/models.py:626
+#: order/models.py:622
msgid "shipped by"
msgstr ""
-#: order/models.py:692
+#: order/models.py:688
msgid "Order cannot be completed as no parts have been assigned"
msgstr ""
-#: order/models.py:696
+#: order/models.py:692
msgid "Only a pending order can be marked as complete"
msgstr ""
-#: order/models.py:699
+#: order/models.py:695
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:702
+#: order/models.py:698
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:882
+#: order/models.py:878
msgid "Item quantity"
msgstr ""
-#: order/models.py:888
+#: order/models.py:884
msgid "Line item reference"
msgstr ""
-#: order/models.py:890
+#: order/models.py:886
msgid "Line item notes"
msgstr ""
-#: order/models.py:895
+#: order/models.py:891
msgid "Target shipping date for this line item"
msgstr ""
-#: order/models.py:913
+#: order/models.py:909
msgid "Context"
msgstr ""
-#: order/models.py:914
+#: order/models.py:910
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:922
+#: order/models.py:918
msgid "Unit price"
msgstr ""
-#: order/models.py:955
+#: order/models.py:951
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:962
+#: order/models.py:958
msgid "deleted"
msgstr ""
-#: order/models.py:968 order/models.py:1050 order/models.py:1072
-#: order/models.py:1168 order/models.py:1268
-#: templates/js/translated/order.js:2719
+#: order/models.py:964 order/models.py:1046 order/models.py:1068
+#: order/models.py:1164 order/models.py:1273
+#: templates/js/translated/order.js:2874
msgid "Order"
msgstr ""
-#: order/models.py:969 order/models.py:1050
+#: order/models.py:965 order/models.py:1046
#: order/templates/order/order_base.html:9
#: order/templates/order/order_base.html:18
#: report/templates/report/inventree_po_report.html:76
#: stock/templates/stock/item_base.html:342
-#: templates/js/translated/order.js:764 templates/js/translated/order.js:1421
+#: templates/js/translated/order.js:870 templates/js/translated/order.js:1527
#: templates/js/translated/part.js:899 templates/js/translated/stock.js:1852
#: templates/js/translated/stock.js:2417
msgid "Purchase Order"
msgstr ""
-#: order/models.py:988
+#: order/models.py:984
msgid "Supplier part"
msgstr ""
-#: order/models.py:995 order/templates/order/order_base.html:169
-#: templates/js/translated/order.js:1197 templates/js/translated/order.js:1785
+#: order/models.py:991 order/templates/order/order_base.html:169
+#: templates/js/translated/order.js:1303 templates/js/translated/order.js:1891
#: templates/js/translated/part.js:993 templates/js/translated/part.js:1020
#: templates/js/translated/table_filters.js:330
msgid "Received"
msgstr ""
-#: order/models.py:996
+#: order/models.py:992
msgid "Number of items received"
msgstr ""
-#: order/models.py:1003 part/templates/part/prices.html:179 stock/models.py:754
-#: stock/serializers.py:167 stock/templates/stock/item_base.html:349
+#: order/models.py:999 part/templates/part/prices.html:179 stock/models.py:745
+#: stock/serializers.py:159 stock/templates/stock/item_base.html:349
#: templates/js/translated/stock.js:1906
msgid "Purchase Price"
msgstr ""
-#: order/models.py:1004
+#: order/models.py:1000
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:1012
+#: order/models.py:1008
msgid "Where does the Purchaser want this item to be stored?"
msgstr ""
-#: order/models.py:1082 part/templates/part/part_pricing.html:112
+#: order/models.py:1078 part/templates/part/part_pricing.html:112
#: part/templates/part/prices.html:119 part/templates/part/prices.html:288
msgid "Sale Price"
msgstr ""
-#: order/models.py:1083
+#: order/models.py:1079
msgid "Unit sale price"
msgstr ""
-#: order/models.py:1088
+#: order/models.py:1084
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:1175
+#: order/models.py:1171
msgid "Date of shipment"
msgstr ""
-#: order/models.py:1182
+#: order/models.py:1178
msgid "Checked By"
msgstr ""
-#: order/models.py:1183
+#: order/models.py:1179
msgid "User who checked this shipment"
msgstr ""
-#: order/models.py:1191
+#: order/models.py:1187
msgid "Shipment number"
msgstr ""
-#: order/models.py:1198
+#: order/models.py:1194
msgid "Shipment notes"
msgstr ""
-#: order/models.py:1205
+#: order/models.py:1201
msgid "Tracking Number"
msgstr ""
-#: order/models.py:1206
+#: order/models.py:1202
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:1216
+#: order/models.py:1213
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:1219
+#: order/models.py:1216
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:1306 order/models.py:1308
+#: order/models.py:1311 order/models.py:1313
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:1312
+#: order/models.py:1317
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:1314
+#: order/models.py:1319
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:1317
+#: order/models.py:1322
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:1321
+#: order/models.py:1326
msgid "StockItem is over-allocated"
msgstr ""
-#: order/models.py:1327 order/serializers.py:1002
+#: order/models.py:1332 order/serializers.py:1005
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:1330
+#: order/models.py:1335
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:1331
+#: order/models.py:1336
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:1339
+#: order/models.py:1344
msgid "Line"
msgstr ""
-#: order/models.py:1347 order/serializers.py:1112 order/serializers.py:1240
+#: order/models.py:1352 order/serializers.py:1115 order/serializers.py:1243
#: templates/js/translated/model_renderers.js:301
msgid "Shipment"
msgstr ""
-#: order/models.py:1348
+#: order/models.py:1353
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:1360 templates/InvenTree/notifications/notifications.html:70
+#: order/models.py:1365 templates/InvenTree/notifications/notifications.html:70
msgid "Item"
msgstr ""
-#: order/models.py:1361
+#: order/models.py:1366
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:1364
+#: order/models.py:1369
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/serializers.py:74
+#: order/serializers.py:69
msgid "Price currency"
msgstr ""
-#: order/serializers.py:203
+#: order/serializers.py:198
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:301
+#: order/serializers.py:296
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:325
+#: order/serializers.py:320
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:339
+#: order/serializers.py:334
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:344
+#: order/serializers.py:339
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:350
+#: order/serializers.py:345
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:351
+#: order/serializers.py:346
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:411 order/serializers.py:1077
+#: order/serializers.py:406 order/serializers.py:1080
msgid "Line Item"
msgstr ""
-#: order/serializers.py:417
+#: order/serializers.py:412
msgid "Line item does not match purchase order"
msgstr ""
-#: order/serializers.py:427 order/serializers.py:532
+#: order/serializers.py:422 order/serializers.py:527
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:446 templates/js/translated/order.js:1055
+#: order/serializers.py:441 templates/js/translated/order.js:1161
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:454 templates/js/translated/order.js:1066
+#: order/serializers.py:449 templates/js/translated/order.js:1172
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:467
+#: order/serializers.py:462
msgid "Barcode Hash"
msgstr ""
-#: order/serializers.py:468
+#: order/serializers.py:463
msgid "Unique identifier field"
msgstr ""
-#: order/serializers.py:485
+#: order/serializers.py:480
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:504
+#: order/serializers.py:499
msgid "An integer quantity must be provided for trackable parts"
msgstr ""
-#: order/serializers.py:544
+#: order/serializers.py:539
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:561
+#: order/serializers.py:556
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:572
+#: order/serializers.py:567
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:847
+#: order/serializers.py:842
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:917
+#: order/serializers.py:913
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:967 order/serializers.py:1089
+#: order/serializers.py:970 order/serializers.py:1092
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:989
+#: order/serializers.py:992
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1102
+#: order/serializers.py:1105
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1126 order/serializers.py:1251
+#: order/serializers.py:1129 order/serializers.py:1254
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1129 order/serializers.py:1254
+#: order/serializers.py:1132 order/serializers.py:1257
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1181
+#: order/serializers.py:1184
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1191
+#: order/serializers.py:1194
msgid "The following serial numbers are already allocated"
msgstr ""
@@ -3770,7 +3766,7 @@ msgid "Edit order"
msgstr ""
#: order/templates/order/order_base.html:47
-#: order/templates/order/sales_order_base.html:60
+#: order/templates/order/sales_order_base.html:61
msgid "Cancel order"
msgstr ""
@@ -3792,22 +3788,22 @@ msgid "Mark order as complete"
msgstr ""
#: order/templates/order/order_base.html:62
-#: order/templates/order/sales_order_base.html:67
+#: order/templates/order/sales_order_base.html:68
msgid "Complete Order"
msgstr ""
#: order/templates/order/order_base.html:84
-#: order/templates/order/sales_order_base.html:79
+#: order/templates/order/sales_order_base.html:80
msgid "Order Reference"
msgstr ""
#: order/templates/order/order_base.html:89
-#: order/templates/order/sales_order_base.html:84
+#: order/templates/order/sales_order_base.html:85
msgid "Order Description"
msgstr ""
#: order/templates/order/order_base.html:94
-#: order/templates/order/sales_order_base.html:89
+#: order/templates/order/sales_order_base.html:90
msgid "Order Status"
msgstr ""
@@ -3816,13 +3812,13 @@ msgid "No suppplier information available"
msgstr ""
#: order/templates/order/order_base.html:130
-#: order/templates/order/sales_order_base.html:128
+#: order/templates/order/sales_order_base.html:129
msgid "Completed Line Items"
msgstr ""
#: order/templates/order/order_base.html:136
-#: order/templates/order/sales_order_base.html:134
-#: order/templates/order/sales_order_base.html:144
+#: order/templates/order/sales_order_base.html:135
+#: order/templates/order/sales_order_base.html:145
msgid "Incomplete"
msgstr ""
@@ -3832,7 +3828,7 @@ msgid "Issued"
msgstr ""
#: order/templates/order/order_base.html:183
-#: order/templates/order/sales_order_base.html:189
+#: order/templates/order/sales_order_base.html:190
msgid "Total cost"
msgstr ""
@@ -3868,8 +3864,8 @@ msgstr ""
#: part/templates/part/import_wizard/match_references.html:49
#: templates/js/translated/bom.js:77 templates/js/translated/build.js:427
#: templates/js/translated/build.js:579 templates/js/translated/build.js:1989
-#: templates/js/translated/order.js:712 templates/js/translated/order.js:1144
-#: templates/js/translated/order.js:2387 templates/js/translated/stock.js:570
+#: templates/js/translated/order.js:818 templates/js/translated/order.js:1250
+#: templates/js/translated/order.js:2493 templates/js/translated/stock.js:570
#: templates/js/translated/stock.js:738
#: templates/patterns/wizard/match_fields.html:70
msgid "Remove row"
@@ -3920,7 +3916,7 @@ msgstr ""
#: order/templates/order/purchase_order_detail.html:53
#: order/templates/order/sales_order_detail.html:45
-#: order/templates/order/sales_order_detail.html:273
+#: order/templates/order/sales_order_detail.html:274
msgid "Add Extra Line"
msgstr ""
@@ -3950,27 +3946,32 @@ msgstr ""
msgid "Print packing list"
msgstr ""
-#: order/templates/order/sales_order_base.html:66
-#: order/templates/order/sales_order_base.html:239
+#: order/templates/order/sales_order_base.html:60
+#: templates/js/translated/order.js:211
+msgid "Complete Shipments"
+msgstr ""
+
+#: order/templates/order/sales_order_base.html:67
+#: order/templates/order/sales_order_base.html:250
msgid "Complete Sales Order"
msgstr ""
-#: order/templates/order/sales_order_base.html:102
+#: order/templates/order/sales_order_base.html:103
msgid "This Sales Order has not been fully allocated"
msgstr ""
-#: order/templates/order/sales_order_base.html:122
-#: templates/js/translated/order.js:2143
+#: order/templates/order/sales_order_base.html:123
+#: templates/js/translated/order.js:2249
msgid "Customer Reference"
msgstr ""
-#: order/templates/order/sales_order_base.html:140
+#: order/templates/order/sales_order_base.html:141
#: order/templates/order/sales_order_detail.html:100
#: order/templates/order/so_sidebar.html:11
msgid "Completed Shipments"
msgstr ""
-#: order/templates/order/sales_order_base.html:221
+#: order/templates/order/sales_order_base.html:222
msgid "Edit Sales Order"
msgstr ""
@@ -3992,73 +3993,73 @@ msgstr ""
msgid "New Shipment"
msgstr ""
-#: order/views.py:121
+#: order/views.py:117
msgid "Match Supplier Parts"
msgstr ""
-#: order/views.py:394
+#: order/views.py:390
msgid "Sales order not found"
msgstr ""
-#: order/views.py:400
+#: order/views.py:396
msgid "Price not found"
msgstr ""
-#: order/views.py:403
+#: order/views.py:399
#, python-brace-format
msgid "Updated {part} unit-price to {price}"
msgstr ""
-#: order/views.py:408
+#: order/views.py:404
#, python-brace-format
msgid "Updated {part} unit-price to {price} and quantity to {qty}"
msgstr ""
-#: part/api.py:516
+#: part/api.py:504
msgid "Incoming Purchase Order"
msgstr ""
-#: part/api.py:536
+#: part/api.py:524
msgid "Outgoing Sales Order"
msgstr ""
-#: part/api.py:554
+#: part/api.py:542
msgid "Stock produced by Build Order"
msgstr ""
-#: part/api.py:586
+#: part/api.py:574
msgid "Stock required for Build Order"
msgstr ""
-#: part/api.py:677
+#: part/api.py:665
msgid "Valid"
msgstr ""
-#: part/api.py:678
+#: part/api.py:666
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/api.py:683
+#: part/api.py:671
msgid "This option must be selected"
msgstr ""
-#: part/api.py:1055
+#: part/api.py:1043
msgid "Must be greater than zero"
msgstr ""
-#: part/api.py:1059
+#: part/api.py:1047
msgid "Must be a valid quantity"
msgstr ""
-#: part/api.py:1074
+#: part/api.py:1062
msgid "Specify location for initial part stock"
msgstr ""
-#: part/api.py:1105 part/api.py:1109 part/api.py:1124 part/api.py:1128
+#: part/api.py:1093 part/api.py:1097 part/api.py:1112 part/api.py:1116
msgid "This field is required"
msgstr ""
-#: part/bom.py:125 part/models.py:111 part/models.py:886
+#: part/bom.py:125 part/models.py:99 part/models.py:874
#: part/templates/part/category.html:108 part/templates/part/part_base.html:330
msgid "Default Location"
msgstr ""
@@ -4078,115 +4079,115 @@ msgstr ""
msgid "On Order"
msgstr ""
-#: part/forms.py:81
+#: part/forms.py:79
msgid "Select part category"
msgstr ""
-#: part/forms.py:100
+#: part/forms.py:98
msgid "Add parameter template to same level categories"
msgstr ""
-#: part/forms.py:104
+#: part/forms.py:102
msgid "Add parameter template to all categories"
msgstr ""
-#: part/forms.py:124
+#: part/forms.py:122
msgid "Input quantity for price calculation"
msgstr ""
-#: part/models.py:112
+#: part/models.py:100
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:115
+#: part/models.py:103
msgid "Default keywords"
msgstr ""
-#: part/models.py:115
+#: part/models.py:103
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:125 part/models.py:2637 part/templates/part/category.html:15
+#: part/models.py:113 part/models.py:2625 part/templates/part/category.html:15
#: part/templates/part/part_app_base.html:10
msgid "Part Category"
msgstr ""
-#: part/models.py:126 part/templates/part/category.html:128
+#: part/models.py:114 part/templates/part/category.html:128
#: templates/InvenTree/search.html:95 templates/js/translated/search.js:113
-#: users/models.py:40
+#: users/models.py:38
msgid "Part Categories"
msgstr ""
-#: part/models.py:367 part/templates/part/cat_link.html:3
+#: part/models.py:355 part/templates/part/cat_link.html:3
#: part/templates/part/category.html:17 part/templates/part/category.html:133
#: part/templates/part/category.html:153
#: part/templates/part/category_sidebar.html:9
#: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82
#: templates/InvenTree/settings/sidebar.html:39
#: templates/js/translated/part.js:1768 templates/js/translated/search.js:99
-#: templates/navbar.html:24 users/models.py:41
+#: templates/navbar.html:24 users/models.py:39
msgid "Parts"
msgstr ""
-#: part/models.py:459
+#: part/models.py:447
msgid "Invalid choice for parent part"
msgstr ""
-#: part/models.py:534 part/models.py:546
+#: part/models.py:522 part/models.py:534
#, python-brace-format
msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)"
msgstr ""
-#: part/models.py:676
+#: part/models.py:664
msgid "Next available serial numbers are"
msgstr ""
-#: part/models.py:680
+#: part/models.py:668
msgid "Next available serial number is"
msgstr ""
-#: part/models.py:685
+#: part/models.py:673
msgid "Most recent serial number is"
msgstr ""
-#: part/models.py:781
+#: part/models.py:769
msgid "Duplicate IPN not allowed in part settings"
msgstr ""
-#: part/models.py:810 part/models.py:2690
+#: part/models.py:798 part/models.py:2678
msgid "Part name"
msgstr ""
-#: part/models.py:817
+#: part/models.py:805
msgid "Is Template"
msgstr ""
-#: part/models.py:818
+#: part/models.py:806
msgid "Is this part a template part?"
msgstr ""
-#: part/models.py:828
+#: part/models.py:816
msgid "Is this part a variant of another part?"
msgstr ""
-#: part/models.py:829
+#: part/models.py:817
msgid "Variant Of"
msgstr ""
-#: part/models.py:835
+#: part/models.py:823
msgid "Part description"
msgstr ""
-#: part/models.py:840 part/templates/part/category.html:86
+#: part/models.py:828 part/templates/part/category.html:86
#: part/templates/part/part_base.html:294
msgid "Keywords"
msgstr ""
-#: part/models.py:841
+#: part/models.py:829
msgid "Part keywords to improve visibility in search results"
msgstr ""
-#: part/models.py:848 part/models.py:2387 part/models.py:2636
+#: part/models.py:836 part/models.py:2375 part/models.py:2624
#: part/templates/part/part_base.html:257
#: part/templates/part/set_category.html:15
#: templates/InvenTree/notifications/notifications.html:65
@@ -4195,432 +4196,432 @@ msgstr ""
msgid "Category"
msgstr ""
-#: part/models.py:849
+#: part/models.py:837
msgid "Part category"
msgstr ""
-#: part/models.py:854 part/templates/part/part_base.html:266
+#: part/models.py:842 part/templates/part/part_base.html:266
#: templates/js/translated/part.js:666 templates/js/translated/part.js:1322
#: templates/js/translated/stock.js:1669
msgid "IPN"
msgstr ""
-#: part/models.py:855
+#: part/models.py:843
msgid "Internal Part Number"
msgstr ""
-#: part/models.py:861
+#: part/models.py:849
msgid "Part revision or version number"
msgstr ""
-#: part/models.py:862 part/templates/part/part_base.html:273
-#: report/models.py:193 templates/js/translated/part.js:670
+#: part/models.py:850 part/templates/part/part_base.html:273
+#: report/models.py:188 templates/js/translated/part.js:670
msgid "Revision"
msgstr ""
-#: part/models.py:884
+#: part/models.py:872
msgid "Where is this item normally stored?"
msgstr ""
-#: part/models.py:931 part/templates/part/part_base.html:339
+#: part/models.py:919 part/templates/part/part_base.html:339
msgid "Default Supplier"
msgstr ""
-#: part/models.py:932
+#: part/models.py:920
msgid "Default supplier part"
msgstr ""
-#: part/models.py:939
+#: part/models.py:927
msgid "Default Expiry"
msgstr ""
-#: part/models.py:940
+#: part/models.py:928
msgid "Expiry time (in days) for stock items of this part"
msgstr ""
-#: part/models.py:945 part/templates/part/part_base.html:200
+#: part/models.py:933 part/templates/part/part_base.html:200
msgid "Minimum Stock"
msgstr ""
-#: part/models.py:946
+#: part/models.py:934
msgid "Minimum allowed stock level"
msgstr ""
-#: part/models.py:953
+#: part/models.py:941
msgid "Stock keeping units for this part"
msgstr ""
-#: part/models.py:959
+#: part/models.py:947
msgid "Can this part be built from other parts?"
msgstr ""
-#: part/models.py:965
+#: part/models.py:953
msgid "Can this part be used to build other parts?"
msgstr ""
-#: part/models.py:971
+#: part/models.py:959
msgid "Does this part have tracking for unique items?"
msgstr ""
-#: part/models.py:976
+#: part/models.py:964
msgid "Can this part be purchased from external suppliers?"
msgstr ""
-#: part/models.py:981
+#: part/models.py:969
msgid "Can this part be sold to customers?"
msgstr ""
-#: part/models.py:986
+#: part/models.py:974
msgid "Is this part active?"
msgstr ""
-#: part/models.py:991
+#: part/models.py:979
msgid "Is this a virtual part, such as a software product or license?"
msgstr ""
-#: part/models.py:996
+#: part/models.py:984
msgid "Part notes - supports Markdown formatting"
msgstr ""
-#: part/models.py:999
+#: part/models.py:987
msgid "BOM checksum"
msgstr ""
-#: part/models.py:999
+#: part/models.py:987
msgid "Stored BOM checksum"
msgstr ""
-#: part/models.py:1002
+#: part/models.py:990
msgid "BOM checked by"
msgstr ""
-#: part/models.py:1004
+#: part/models.py:992
msgid "BOM checked date"
msgstr ""
-#: part/models.py:1008
+#: part/models.py:996
msgid "Creation User"
msgstr ""
-#: part/models.py:1872
+#: part/models.py:1860
msgid "Sell multiple"
msgstr ""
-#: part/models.py:2437
+#: part/models.py:2425
msgid "Test templates can only be created for trackable parts"
msgstr ""
-#: part/models.py:2454
+#: part/models.py:2442
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2474 templates/js/translated/part.js:1819
+#: part/models.py:2462 templates/js/translated/part.js:1819
#: templates/js/translated/stock.js:1284
msgid "Test Name"
msgstr ""
-#: part/models.py:2475
+#: part/models.py:2463
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:2480
+#: part/models.py:2468
msgid "Test Description"
msgstr ""
-#: part/models.py:2481
+#: part/models.py:2469
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2486 templates/js/translated/part.js:1828
+#: part/models.py:2474 templates/js/translated/part.js:1828
#: templates/js/translated/table_filters.js:294
msgid "Required"
msgstr ""
-#: part/models.py:2487
+#: part/models.py:2475
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2492 templates/js/translated/part.js:1836
+#: part/models.py:2480 templates/js/translated/part.js:1836
msgid "Requires Value"
msgstr ""
-#: part/models.py:2493
+#: part/models.py:2481
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2498 templates/js/translated/part.js:1843
+#: part/models.py:2486 templates/js/translated/part.js:1843
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:2499
+#: part/models.py:2487
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:2510
+#: part/models.py:2498
#, python-brace-format
msgid "Illegal character in template name ({c})"
msgstr ""
-#: part/models.py:2546
+#: part/models.py:2534
msgid "Parameter template name must be unique"
msgstr ""
-#: part/models.py:2554
+#: part/models.py:2542
msgid "Parameter Name"
msgstr ""
-#: part/models.py:2561
+#: part/models.py:2549
msgid "Parameter Units"
msgstr ""
-#: part/models.py:2591
+#: part/models.py:2579
msgid "Parent Part"
msgstr ""
-#: part/models.py:2593 part/models.py:2642 part/models.py:2643
+#: part/models.py:2581 part/models.py:2630 part/models.py:2631
#: templates/InvenTree/settings/settings.html:226
msgid "Parameter Template"
msgstr ""
-#: part/models.py:2595
+#: part/models.py:2583
msgid "Data"
msgstr ""
-#: part/models.py:2595
+#: part/models.py:2583
msgid "Parameter Value"
msgstr ""
-#: part/models.py:2647 templates/InvenTree/settings/settings.html:235
+#: part/models.py:2635 templates/InvenTree/settings/settings.html:235
msgid "Default Value"
msgstr ""
-#: part/models.py:2648
+#: part/models.py:2636
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:2682
+#: part/models.py:2670
msgid "Part ID or part name"
msgstr ""
-#: part/models.py:2685 templates/js/translated/model_renderers.js:200
+#: part/models.py:2673 templates/js/translated/model_renderers.js:200
msgid "Part ID"
msgstr ""
-#: part/models.py:2686
+#: part/models.py:2674
msgid "Unique part ID value"
msgstr ""
-#: part/models.py:2689
+#: part/models.py:2677
msgid "Part Name"
msgstr ""
-#: part/models.py:2693
+#: part/models.py:2681
msgid "Part IPN"
msgstr ""
-#: part/models.py:2694
+#: part/models.py:2682
msgid "Part IPN value"
msgstr ""
-#: part/models.py:2697
+#: part/models.py:2685
msgid "Level"
msgstr ""
-#: part/models.py:2698
+#: part/models.py:2686
msgid "BOM level"
msgstr ""
-#: part/models.py:2773
+#: part/models.py:2761
msgid "Select parent part"
msgstr ""
-#: part/models.py:2781
+#: part/models.py:2769
msgid "Sub part"
msgstr ""
-#: part/models.py:2782
+#: part/models.py:2770
msgid "Select part to be used in BOM"
msgstr ""
-#: part/models.py:2788
+#: part/models.py:2776
msgid "BOM quantity for this BOM item"
msgstr ""
-#: part/models.py:2790 part/templates/part/upload_bom.html:58
+#: part/models.py:2778 part/templates/part/upload_bom.html:58
#: templates/js/translated/bom.js:898 templates/js/translated/bom.js:992
#: templates/js/translated/table_filters.js:92
msgid "Optional"
msgstr ""
-#: part/models.py:2790
+#: part/models.py:2778
msgid "This BOM item is optional"
msgstr ""
-#: part/models.py:2793 part/templates/part/upload_bom.html:55
+#: part/models.py:2781 part/templates/part/upload_bom.html:55
msgid "Overage"
msgstr ""
-#: part/models.py:2794
+#: part/models.py:2782
msgid "Estimated build wastage quantity (absolute or percentage)"
msgstr ""
-#: part/models.py:2797
+#: part/models.py:2785
msgid "BOM item reference"
msgstr ""
-#: part/models.py:2800
+#: part/models.py:2788
msgid "BOM item notes"
msgstr ""
-#: part/models.py:2802
+#: part/models.py:2790
msgid "Checksum"
msgstr ""
-#: part/models.py:2802
+#: part/models.py:2790
msgid "BOM line checksum"
msgstr ""
-#: part/models.py:2806 part/templates/part/upload_bom.html:57
+#: part/models.py:2794 part/templates/part/upload_bom.html:57
#: templates/js/translated/bom.js:1009
#: templates/js/translated/table_filters.js:68
#: templates/js/translated/table_filters.js:88
msgid "Inherited"
msgstr ""
-#: part/models.py:2807
+#: part/models.py:2795
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr ""
-#: part/models.py:2812 part/templates/part/upload_bom.html:56
+#: part/models.py:2800 part/templates/part/upload_bom.html:56
#: templates/js/translated/bom.js:1001
msgid "Allow Variants"
msgstr ""
-#: part/models.py:2813
+#: part/models.py:2801
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:2898 stock/models.py:495
+#: part/models.py:2886 stock/models.py:486
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:2907 part/models.py:2909
+#: part/models.py:2895 part/models.py:2897
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:3021
+#: part/models.py:3009
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:3043
+#: part/models.py:3031
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:3055
+#: part/models.py:3043
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:3063
+#: part/models.py:3051
msgid "Substitute part"
msgstr ""
-#: part/models.py:3074
+#: part/models.py:3062
msgid "Part 1"
msgstr ""
-#: part/models.py:3078
+#: part/models.py:3066
msgid "Part 2"
msgstr ""
-#: part/models.py:3078
+#: part/models.py:3066
msgid "Select Related Part"
msgstr ""
-#: part/models.py:3110
+#: part/models.py:3098
msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique"
msgstr ""
-#: part/serializers.py:157 part/serializers.py:189 stock/serializers.py:177
+#: part/serializers.py:152 part/serializers.py:184 stock/serializers.py:169
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:923
+#: part/serializers.py:918
msgid "Select part to copy BOM from"
msgstr ""
-#: part/serializers.py:934
+#: part/serializers.py:929
msgid "Remove Existing Data"
msgstr ""
-#: part/serializers.py:935
+#: part/serializers.py:930
msgid "Remove existing BOM items before copying"
msgstr ""
-#: part/serializers.py:940
+#: part/serializers.py:935
msgid "Include Inherited"
msgstr ""
-#: part/serializers.py:941
+#: part/serializers.py:936
msgid "Include BOM items which are inherited from templated parts"
msgstr ""
-#: part/serializers.py:946
+#: part/serializers.py:941
msgid "Skip Invalid Rows"
msgstr ""
-#: part/serializers.py:947
+#: part/serializers.py:942
msgid "Enable this option to skip invalid rows"
msgstr ""
-#: part/serializers.py:952
+#: part/serializers.py:947
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:953
+#: part/serializers.py:948
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
-#: part/serializers.py:997
+#: part/serializers.py:992
msgid "Clear Existing BOM"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:993
msgid "Delete existing BOM items before uploading"
msgstr ""
-#: part/serializers.py:1025
+#: part/serializers.py:1020
msgid "No part column specified"
msgstr ""
-#: part/serializers.py:1068
+#: part/serializers.py:1063
msgid "Multiple matching parts found"
msgstr ""
-#: part/serializers.py:1071
+#: part/serializers.py:1066
msgid "No matching part found"
msgstr ""
-#: part/serializers.py:1074
+#: part/serializers.py:1069
msgid "Part is not designated as a component"
msgstr ""
-#: part/serializers.py:1083
+#: part/serializers.py:1078
msgid "Quantity not provided"
msgstr ""
-#: part/serializers.py:1091
+#: part/serializers.py:1086
msgid "Invalid quantity"
msgstr ""
-#: part/serializers.py:1110
+#: part/serializers.py:1105
msgid "At least one BOM item is required"
msgstr ""
-#: part/tasks.py:15
+#: part/tasks.py:14
msgid "Low stock notification"
msgstr ""
-#: part/tasks.py:16
+#: part/tasks.py:15
#, python-brace-format
msgid "The available stock for {part.name} has fallen below the configured minimum level"
msgstr ""
@@ -5100,7 +5101,7 @@ msgstr ""
msgid "This part is a variant of %(link)s"
msgstr ""
-#: part/templates/part/part_base.html:194 templates/js/translated/order.js:3150
+#: part/templates/part/part_base.html:194 templates/js/translated/order.js:3305
#: templates/js/translated/table_filters.js:193
msgid "In Stock"
msgstr ""
@@ -5391,93 +5392,93 @@ msgstr ""
msgid "Create a new variant of template '%(full_name)s'."
msgstr ""
-#: part/templatetags/inventree_extras.py:191
+#: part/templatetags/inventree_extras.py:186
msgid "Unknown database"
msgstr ""
-#: part/templatetags/inventree_extras.py:228
+#: part/templatetags/inventree_extras.py:223
#, python-brace-format
msgid "{title} v{version}"
msgstr ""
-#: part/views.py:85
+#: part/views.py:74
msgid "Set Part Category"
msgstr ""
-#: part/views.py:135
+#: part/views.py:124
#, python-brace-format
msgid "Set category for {n} parts"
msgstr ""
-#: part/views.py:207
+#: part/views.py:196
msgid "Match References"
msgstr ""
-#: part/views.py:508
+#: part/views.py:497
msgid "None"
msgstr ""
-#: part/views.py:567
+#: part/views.py:556
msgid "Part QR Code"
msgstr ""
-#: part/views.py:669
+#: part/views.py:658
msgid "Select Part Image"
msgstr ""
-#: part/views.py:695
+#: part/views.py:684
msgid "Updated part image"
msgstr ""
-#: part/views.py:698
+#: part/views.py:687
msgid "Part image not found"
msgstr ""
-#: part/views.py:786
+#: part/views.py:775
msgid "Confirm Part Deletion"
msgstr ""
-#: part/views.py:793
+#: part/views.py:782
msgid "Part was deleted"
msgstr ""
-#: part/views.py:802
+#: part/views.py:791
msgid "Part Pricing"
msgstr ""
-#: part/views.py:951
+#: part/views.py:940
msgid "Create Part Parameter Template"
msgstr ""
-#: part/views.py:961
+#: part/views.py:950
msgid "Edit Part Parameter Template"
msgstr ""
-#: part/views.py:968
+#: part/views.py:957
msgid "Delete Part Parameter Template"
msgstr ""
-#: part/views.py:1010
+#: part/views.py:999
msgid "Delete Part Category"
msgstr ""
-#: part/views.py:1016
+#: part/views.py:1005
msgid "Part category was deleted"
msgstr ""
-#: part/views.py:1025
+#: part/views.py:1014
msgid "Create Category Parameter Template"
msgstr ""
-#: part/views.py:1126
+#: part/views.py:1115
msgid "Edit Category Parameter Template"
msgstr ""
-#: part/views.py:1182
+#: part/views.py:1171
msgid "Delete Category Parameter Template"
msgstr ""
-#: plugin/apps.py:49
+#: plugin/apps.py:48
msgid "Your enviroment has an outdated git version. This prevents InvenTree from loading plugin details."
msgstr ""
@@ -5489,47 +5490,47 @@ msgstr ""
msgid "No matching action found"
msgstr ""
-#: plugin/base/barcodes/api.py:53 plugin/base/barcodes/api.py:153
+#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:152
msgid "Must provide barcode_data parameter"
msgstr ""
-#: plugin/base/barcodes/api.py:129
+#: plugin/base/barcodes/api.py:128
msgid "No match found for barcode data"
msgstr ""
-#: plugin/base/barcodes/api.py:131
+#: plugin/base/barcodes/api.py:130
msgid "Match found for barcode data"
msgstr ""
-#: plugin/base/barcodes/api.py:156
+#: plugin/base/barcodes/api.py:155
msgid "Must provide stockitem parameter"
msgstr ""
-#: plugin/base/barcodes/api.py:163
+#: plugin/base/barcodes/api.py:162
msgid "No matching stock item found"
msgstr ""
-#: plugin/base/barcodes/api.py:193
+#: plugin/base/barcodes/api.py:192
msgid "Barcode already matches Stock Item"
msgstr ""
-#: plugin/base/barcodes/api.py:197
+#: plugin/base/barcodes/api.py:196
msgid "Barcode already matches Stock Location"
msgstr ""
-#: plugin/base/barcodes/api.py:201
+#: plugin/base/barcodes/api.py:200
msgid "Barcode already matches Part"
msgstr ""
-#: plugin/base/barcodes/api.py:207 plugin/base/barcodes/api.py:219
+#: plugin/base/barcodes/api.py:206 plugin/base/barcodes/api.py:218
msgid "Barcode hash already matches Stock Item"
msgstr ""
-#: plugin/base/barcodes/api.py:225
+#: plugin/base/barcodes/api.py:224
msgid "Barcode associated with Stock Item"
msgstr ""
-#: plugin/base/label/label.py:40
+#: plugin/base/label/label.py:39
msgid "Label printing failed"
msgstr ""
@@ -5551,51 +5552,51 @@ msgstr ""
msgid "Allow sending of emails for event notifications"
msgstr ""
-#: plugin/models.py:36
+#: plugin/models.py:35
msgid "Plugin Metadata"
msgstr ""
-#: plugin/models.py:37
+#: plugin/models.py:36
msgid "JSON metadata field, for use by external plugins"
msgstr ""
-#: plugin/models.py:86
+#: plugin/models.py:85
msgid "Plugin Configuration"
msgstr ""
-#: plugin/models.py:87
+#: plugin/models.py:86
msgid "Plugin Configurations"
msgstr ""
-#: plugin/models.py:92
+#: plugin/models.py:91
msgid "Key"
msgstr ""
-#: plugin/models.py:93
+#: plugin/models.py:92
msgid "Key of plugin"
msgstr ""
-#: plugin/models.py:101
+#: plugin/models.py:100
msgid "PluginName of the plugin"
msgstr ""
-#: plugin/models.py:107
+#: plugin/models.py:106
msgid "Is the plugin active"
msgstr ""
-#: plugin/models.py:180
+#: plugin/models.py:179
msgid "Plugin"
msgstr ""
-#: plugin/models.py:254
+#: plugin/models.py:253
msgid "Method"
msgstr ""
-#: plugin/plugin.py:247
+#: plugin/plugin.py:246
msgid "No author found"
msgstr ""
-#: plugin/plugin.py:261
+#: plugin/plugin.py:260
msgid "No date found"
msgstr ""
@@ -5663,92 +5664,96 @@ msgstr ""
msgid "Either packagename of URL must be provided"
msgstr ""
-#: report/api.py:233 report/api.py:280
+#: report/api.py:191
+msgid "No valid objects provided to template"
+msgstr ""
+
+#: report/api.py:223 report/api.py:270
#, python-brace-format
msgid "Template file '{template}' is missing or does not exist"
msgstr ""
-#: report/models.py:175
+#: report/models.py:170
msgid "Template name"
msgstr ""
-#: report/models.py:181
+#: report/models.py:176
msgid "Report template file"
msgstr ""
-#: report/models.py:188
+#: report/models.py:183
msgid "Report template description"
msgstr ""
-#: report/models.py:194
+#: report/models.py:189
msgid "Report revision number (auto-increments)"
msgstr ""
-#: report/models.py:285
+#: report/models.py:280
msgid "Pattern for generating report filenames"
msgstr ""
-#: report/models.py:292
+#: report/models.py:287
msgid "Report template is enabled"
msgstr ""
-#: report/models.py:316
+#: report/models.py:311
msgid "StockItem query filters (comma-separated list of key=value pairs)"
msgstr ""
-#: report/models.py:324
+#: report/models.py:319
msgid "Include Installed Tests"
msgstr ""
-#: report/models.py:325
+#: report/models.py:320
msgid "Include test results for stock items installed inside assembled item"
msgstr ""
-#: report/models.py:375
+#: report/models.py:370
msgid "Build Filters"
msgstr ""
-#: report/models.py:376
+#: report/models.py:371
msgid "Build query filters (comma-separated list of key=value pairs"
msgstr ""
-#: report/models.py:418
+#: report/models.py:413
msgid "Part Filters"
msgstr ""
-#: report/models.py:419
+#: report/models.py:414
msgid "Part query filters (comma-separated list of key=value pairs"
msgstr ""
-#: report/models.py:453
+#: report/models.py:448
msgid "Purchase order query filters"
msgstr ""
-#: report/models.py:492
+#: report/models.py:487
msgid "Sales order query filters"
msgstr ""
-#: report/models.py:547
+#: report/models.py:542
msgid "Snippet"
msgstr ""
-#: report/models.py:548
+#: report/models.py:543
msgid "Report snippet file"
msgstr ""
-#: report/models.py:552
+#: report/models.py:547
msgid "Snippet file description"
msgstr ""
-#: report/models.py:587
+#: report/models.py:582
msgid "Asset"
msgstr ""
-#: report/models.py:588
+#: report/models.py:583
msgid "Report asset file"
msgstr ""
-#: report/models.py:591
+#: report/models.py:586
msgid "Asset file description"
msgstr ""
@@ -5765,12 +5770,12 @@ msgid "Stock Item Test Report"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:79
-#: stock/models.py:664 stock/templates/stock/item_base.html:162
+#: stock/models.py:655 stock/templates/stock/item_base.html:162
#: templates/js/translated/build.js:420 templates/js/translated/build.js:572
#: templates/js/translated/build.js:1178 templates/js/translated/build.js:1688
#: templates/js/translated/model_renderers.js:106
-#: templates/js/translated/order.js:108 templates/js/translated/order.js:2836
-#: templates/js/translated/order.js:2925 templates/js/translated/stock.js:435
+#: templates/js/translated/order.js:109 templates/js/translated/order.js:2991
+#: templates/js/translated/order.js:3080 templates/js/translated/stock.js:435
msgid "Serial Number"
msgstr ""
@@ -5779,19 +5784,19 @@ msgid "Test Results"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:93
-#: stock/models.py:2192
+#: stock/models.py:2183
msgid "Test"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:94
-#: stock/models.py:2198
+#: stock/models.py:2189
msgid "Result"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:97
#: templates/InvenTree/settings/plugin.html:51
#: templates/InvenTree/settings/plugin_settings.html:38
-#: templates/js/translated/order.js:1469 templates/js/translated/stock.js:2345
+#: templates/js/translated/order.js:1575 templates/js/translated/stock.js:2345
msgid "Date"
msgstr ""
@@ -5814,362 +5819,362 @@ msgstr ""
msgid "Serial"
msgstr ""
-#: stock/api.py:554
+#: stock/api.py:542
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:561
+#: stock/api.py:549
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:586
+#: stock/api.py:574
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/models.py:91 stock/models.py:759
+#: stock/models.py:82 stock/models.py:750
#: stock/templates/stock/item_base.html:417
msgid "Owner"
msgstr ""
-#: stock/models.py:92 stock/models.py:760
+#: stock/models.py:83 stock/models.py:751
msgid "Select Owner"
msgstr ""
-#: stock/models.py:468
+#: stock/models.py:459
msgid "StockItem with this serial number already exists"
msgstr ""
-#: stock/models.py:512
+#: stock/models.py:503
#, python-brace-format
msgid "Part type ('{pf}') must be {pe}"
msgstr ""
-#: stock/models.py:522 stock/models.py:531
+#: stock/models.py:513 stock/models.py:522
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:523
+#: stock/models.py:514
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:545
+#: stock/models.py:536
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:551
+#: stock/models.py:542
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:565
+#: stock/models.py:556
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:608
+#: stock/models.py:599
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:617
+#: stock/models.py:608
msgid "Base part"
msgstr ""
-#: stock/models.py:625
+#: stock/models.py:616
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:631 stock/templates/stock/location.html:17
+#: stock/models.py:622 stock/templates/stock/location.html:17
#: stock/templates/stock/stock_app_base.html:8
msgid "Stock Location"
msgstr ""
-#: stock/models.py:634
+#: stock/models.py:625
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:641
+#: stock/models.py:632
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:647 stock/templates/stock/item_base.html:288
+#: stock/models.py:638 stock/templates/stock/item_base.html:288
msgid "Installed In"
msgstr ""
-#: stock/models.py:650
+#: stock/models.py:641
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:666
+#: stock/models.py:657
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:680
+#: stock/models.py:671
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:685
+#: stock/models.py:676
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:694
+#: stock/models.py:685
msgid "Source Build"
msgstr ""
-#: stock/models.py:696
+#: stock/models.py:687
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:707
+#: stock/models.py:698
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:710
+#: stock/models.py:701
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:716
+#: stock/models.py:707
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:722 stock/templates/stock/item_base.html:199
+#: stock/models.py:713 stock/templates/stock/item_base.html:199
#: templates/js/translated/stock.js:1822
msgid "Expiry Date"
msgstr ""
-#: stock/models.py:723
+#: stock/models.py:714
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:736
+#: stock/models.py:727
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:736
+#: stock/models.py:727
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:746 stock/templates/stock/item.html:137
+#: stock/models.py:737 stock/templates/stock/item.html:137
msgid "Stock Item Notes"
msgstr ""
-#: stock/models.py:755
+#: stock/models.py:746
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:787
+#: stock/models.py:778
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1307
+#: stock/models.py:1298
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1313
+#: stock/models.py:1304
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1319
+#: stock/models.py:1310
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({n})"
msgstr ""
-#: stock/models.py:1322
+#: stock/models.py:1313
msgid "Serial numbers must be a list of integers"
msgstr ""
-#: stock/models.py:1325
+#: stock/models.py:1316
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1332
+#: stock/models.py:1323
#, python-brace-format
msgid "Serial numbers already exist: {exists}"
msgstr ""
-#: stock/models.py:1403
+#: stock/models.py:1394
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:1406
+#: stock/models.py:1397
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:1409
+#: stock/models.py:1400
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:1412
+#: stock/models.py:1403
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:1415
+#: stock/models.py:1406
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:1418
+#: stock/models.py:1409
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:1425 stock/serializers.py:871
+#: stock/models.py:1416 stock/serializers.py:863
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:1429
+#: stock/models.py:1420
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:1433
+#: stock/models.py:1424
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:1437
+#: stock/models.py:1428
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:1609
+#: stock/models.py:1600
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2112
+#: stock/models.py:2103
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2169
+#: stock/models.py:2160
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:2175
+#: stock/models.py:2166
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:2193
+#: stock/models.py:2184
msgid "Test name"
msgstr ""
-#: stock/models.py:2199
+#: stock/models.py:2190
msgid "Test result"
msgstr ""
-#: stock/models.py:2205
+#: stock/models.py:2196
msgid "Test output value"
msgstr ""
-#: stock/models.py:2212
+#: stock/models.py:2203
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:2218
+#: stock/models.py:2209
msgid "Test notes"
msgstr ""
-#: stock/serializers.py:170
+#: stock/serializers.py:162
msgid "Purchase price of this stock item"
msgstr ""
-#: stock/serializers.py:291
+#: stock/serializers.py:283
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:306
+#: stock/serializers.py:298
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:312
+#: stock/serializers.py:304
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:323 stock/serializers.py:828 stock/serializers.py:1069
+#: stock/serializers.py:315 stock/serializers.py:820 stock/serializers.py:1061
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:330
+#: stock/serializers.py:322
msgid "Optional note field"
msgstr ""
-#: stock/serializers.py:343
+#: stock/serializers.py:335
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:360
+#: stock/serializers.py:352
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:402
+#: stock/serializers.py:394
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:418
+#: stock/serializers.py:410
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:425
+#: stock/serializers.py:417
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:463
+#: stock/serializers.py:455
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:468
+#: stock/serializers.py:460
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:685
+#: stock/serializers.py:677
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:689
+#: stock/serializers.py:681
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:693
+#: stock/serializers.py:685
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:723
+#: stock/serializers.py:715
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:729
+#: stock/serializers.py:721
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:737
+#: stock/serializers.py:729
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:747 stock/serializers.py:977
+#: stock/serializers.py:739 stock/serializers.py:969
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:835
+#: stock/serializers.py:827
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:840
+#: stock/serializers.py:832
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:841
+#: stock/serializers.py:833
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:846
+#: stock/serializers.py:838
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:847
+#: stock/serializers.py:839
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:857
+#: stock/serializers.py:849
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:939
+#: stock/serializers.py:931
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:967
+#: stock/serializers.py:959
msgid "Stock transaction notes"
msgstr ""
@@ -6482,7 +6487,7 @@ msgid "Sublocations"
msgstr ""
#: stock/templates/stock/location.html:156 templates/InvenTree/search.html:164
-#: templates/js/translated/search.js:153 users/models.py:42
+#: templates/js/translated/search.js:153 users/models.py:40
msgid "Stock Locations"
msgstr ""
@@ -6534,7 +6539,7 @@ msgstr ""
msgid "Child Items"
msgstr ""
-#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:227
+#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:221
msgid "Convert Stock Item"
msgstr ""
@@ -6559,55 +6564,55 @@ msgstr ""
msgid "Are you sure you want to delete this stock tracking entry?"
msgstr ""
-#: stock/views.py:125
+#: stock/views.py:119
msgid "Stock Location QR code"
msgstr ""
-#: stock/views.py:144
+#: stock/views.py:138
msgid "Return to Stock"
msgstr ""
-#: stock/views.py:153
+#: stock/views.py:147
msgid "Specify a valid location"
msgstr ""
-#: stock/views.py:164
+#: stock/views.py:158
msgid "Stock item returned from customer"
msgstr ""
-#: stock/views.py:175
+#: stock/views.py:169
msgid "Delete All Test Data"
msgstr ""
-#: stock/views.py:192
+#: stock/views.py:186
msgid "Confirm test data deletion"
msgstr ""
-#: stock/views.py:193
+#: stock/views.py:187
msgid "Check the confirmation box"
msgstr ""
-#: stock/views.py:208
+#: stock/views.py:202
msgid "Stock Item QR Code"
msgstr ""
-#: stock/views.py:264
+#: stock/views.py:258
msgid "Delete Stock Location"
msgstr ""
-#: stock/views.py:277
+#: stock/views.py:271
msgid "Delete Stock Item"
msgstr ""
-#: stock/views.py:288
+#: stock/views.py:282
msgid "Delete Stock Tracking Entry"
msgstr ""
-#: stock/views.py:295
+#: stock/views.py:289
msgid "Edit Stock Tracking Entry"
msgstr ""
-#: stock/views.py:304
+#: stock/views.py:298
msgid "Add Stock Tracking Entry"
msgstr ""
@@ -6881,7 +6886,7 @@ msgid "Install Plugin"
msgstr ""
#: templates/InvenTree/settings/plugin.html:48 templates/navbar.html:137
-#: users/models.py:39
+#: users/models.py:37
msgid "Admin"
msgstr ""
@@ -7326,9 +7331,9 @@ msgstr ""
#: templates/about.html:11 templates/about.html:105
#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621
-#: templates/js/translated/modals.js:55 templates/js/translated/modals.js:591
-#: templates/js/translated/modals.js:685 templates/js/translated/modals.js:993
-#: templates/js/translated/order.js:807 templates/modals.html:15
+#: templates/js/translated/modals.js:55 templates/js/translated/modals.js:594
+#: templates/js/translated/modals.js:688 templates/js/translated/modals.js:996
+#: templates/js/translated/order.js:913 templates/modals.html:15
#: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50
msgid "Close"
msgstr ""
@@ -7639,11 +7644,11 @@ msgstr ""
msgid "Remote image must not exceed maximum allowable file size"
msgstr ""
-#: templates/js/translated/api.js:190 templates/js/translated/modals.js:1063
+#: templates/js/translated/api.js:190 templates/js/translated/modals.js:1066
msgid "No Response"
msgstr ""
-#: templates/js/translated/api.js:191 templates/js/translated/modals.js:1064
+#: templates/js/translated/api.js:191 templates/js/translated/modals.js:1067
msgid "No response from the InvenTree server"
msgstr ""
@@ -7655,27 +7660,27 @@ msgstr ""
msgid "API request returned error code 400"
msgstr ""
-#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1073
+#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1076
msgid "Error 401: Not Authenticated"
msgstr ""
-#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1074
+#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1077
msgid "Authentication credentials not supplied"
msgstr ""
-#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1078
+#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1081
msgid "Error 403: Permission Denied"
msgstr ""
-#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1079
+#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1082
msgid "You do not have the required permissions to access this function"
msgstr ""
-#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1083
+#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1086
msgid "Error 404: Resource Not Found"
msgstr ""
-#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1084
+#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1087
msgid "The requested resource could not be located on the server"
msgstr ""
@@ -7687,11 +7692,11 @@ msgstr ""
msgid "HTTP method not allowed at URL"
msgstr ""
-#: templates/js/translated/api.js:222 templates/js/translated/modals.js:1088
+#: templates/js/translated/api.js:222 templates/js/translated/modals.js:1091
msgid "Error 408: Timeout"
msgstr ""
-#: templates/js/translated/api.js:223 templates/js/translated/modals.js:1089
+#: templates/js/translated/api.js:223 templates/js/translated/modals.js:1092
msgid "Connection timeout while requesting data from server"
msgstr ""
@@ -7760,7 +7765,7 @@ msgid "Unknown response from server"
msgstr ""
#: templates/js/translated/barcode.js:182
-#: templates/js/translated/modals.js:1053
+#: templates/js/translated/modals.js:1056
msgid "Invalid server response"
msgstr ""
@@ -7842,12 +7847,12 @@ msgid "Download BOM Template"
msgstr ""
#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287
-#: templates/js/translated/order.js:588 templates/js/translated/tables.js:53
+#: templates/js/translated/order.js:694 templates/js/translated/tables.js:53
msgid "Format"
msgstr ""
#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288
-#: templates/js/translated/order.js:589
+#: templates/js/translated/order.js:695
msgid "Select file format"
msgstr ""
@@ -8147,12 +8152,12 @@ msgid "No required tests for this build"
msgstr ""
#: templates/js/translated/build.js:1727 templates/js/translated/build.js:2556
-#: templates/js/translated/order.js:2873
+#: templates/js/translated/order.js:3028
msgid "Edit stock allocation"
msgstr ""
#: templates/js/translated/build.js:1729 templates/js/translated/build.js:2557
-#: templates/js/translated/order.js:2874
+#: templates/js/translated/order.js:3029
msgid "Delete stock allocation"
msgstr ""
@@ -8181,11 +8186,11 @@ msgid "Sufficient stock available"
msgstr ""
#: templates/js/translated/build.js:1856 templates/js/translated/build.js:2101
-#: templates/js/translated/build.js:2552 templates/js/translated/order.js:3160
+#: templates/js/translated/build.js:2552 templates/js/translated/order.js:3315
msgid "Allocated"
msgstr ""
-#: templates/js/translated/build.js:1904 templates/js/translated/order.js:3240
+#: templates/js/translated/build.js:1904 templates/js/translated/order.js:3395
msgid "Build stock"
msgstr ""
@@ -8193,21 +8198,21 @@ msgstr ""
msgid "Order stock"
msgstr ""
-#: templates/js/translated/build.js:1911 templates/js/translated/order.js:3233
+#: templates/js/translated/build.js:1911 templates/js/translated/order.js:3388
msgid "Allocate stock"
msgstr ""
#: templates/js/translated/build.js:1950 templates/js/translated/label.js:172
-#: templates/js/translated/order.js:635 templates/js/translated/order.js:2449
+#: templates/js/translated/order.js:741 templates/js/translated/order.js:2555
#: templates/js/translated/report.js:225
msgid "Select Parts"
msgstr ""
-#: templates/js/translated/build.js:1951 templates/js/translated/order.js:2450
+#: templates/js/translated/build.js:1951 templates/js/translated/order.js:2556
msgid "You must select at least one part to allocate"
msgstr ""
-#: templates/js/translated/build.js:2000 templates/js/translated/order.js:2398
+#: templates/js/translated/build.js:2000 templates/js/translated/order.js:2504
msgid "Specify stock allocation quantity"
msgstr ""
@@ -8219,7 +8224,7 @@ msgstr ""
msgid "All selected parts have been fully allocated"
msgstr ""
-#: templates/js/translated/build.js:2089 templates/js/translated/order.js:2464
+#: templates/js/translated/build.js:2089 templates/js/translated/order.js:2570
msgid "Select source location (leave blank to take from all locations)"
msgstr ""
@@ -8227,11 +8232,11 @@ msgstr ""
msgid "Allocate Stock Items to Build Order"
msgstr ""
-#: templates/js/translated/build.js:2128 templates/js/translated/order.js:2512
+#: templates/js/translated/build.js:2128 templates/js/translated/order.js:2667
msgid "No matching stock locations"
msgstr ""
-#: templates/js/translated/build.js:2200 templates/js/translated/order.js:2589
+#: templates/js/translated/build.js:2200 templates/js/translated/order.js:2744
msgid "No matching stock items"
msgstr ""
@@ -8305,7 +8310,7 @@ msgstr ""
msgid "Delete Manufacturer Part"
msgstr ""
-#: templates/js/translated/company.js:165 templates/js/translated/order.js:385
+#: templates/js/translated/company.js:165 templates/js/translated/order.js:491
msgid "Add Supplier"
msgstr ""
@@ -8440,40 +8445,40 @@ msgstr ""
msgid "View operation not allowed"
msgstr ""
-#: templates/js/translated/forms.js:641
+#: templates/js/translated/forms.js:646
msgid "Keep this form open"
msgstr ""
-#: templates/js/translated/forms.js:716
+#: templates/js/translated/forms.js:746
msgid "Enter a valid number"
msgstr ""
-#: templates/js/translated/forms.js:1208 templates/modals.html:19
+#: templates/js/translated/forms.js:1238 templates/modals.html:19
#: templates/modals.html:43
msgid "Form errors exist"
msgstr ""
-#: templates/js/translated/forms.js:1634
+#: templates/js/translated/forms.js:1671
msgid "No results found"
msgstr ""
-#: templates/js/translated/forms.js:1849 templates/search.html:29
+#: templates/js/translated/forms.js:1886 templates/search.html:29
msgid "Searching"
msgstr ""
-#: templates/js/translated/forms.js:2102
+#: templates/js/translated/forms.js:2139
msgid "Clear input"
msgstr ""
-#: templates/js/translated/forms.js:2567
+#: templates/js/translated/forms.js:2605
msgid "File Column"
msgstr ""
-#: templates/js/translated/forms.js:2567
+#: templates/js/translated/forms.js:2605
msgid "Field Name"
msgstr ""
-#: templates/js/translated/forms.js:2579
+#: templates/js/translated/forms.js:2617
msgid "Select Columns"
msgstr ""
@@ -8547,62 +8552,62 @@ msgstr ""
msgid "Select Label Template"
msgstr ""
-#: templates/js/translated/modals.js:78 templates/js/translated/modals.js:138
-#: templates/js/translated/modals.js:617
+#: templates/js/translated/modals.js:81 templates/js/translated/modals.js:141
+#: templates/js/translated/modals.js:620
msgid "Cancel"
msgstr ""
-#: templates/js/translated/modals.js:79 templates/js/translated/modals.js:137
-#: templates/js/translated/modals.js:684 templates/js/translated/modals.js:992
+#: templates/js/translated/modals.js:82 templates/js/translated/modals.js:140
+#: templates/js/translated/modals.js:687 templates/js/translated/modals.js:995
#: templates/modals.html:28 templates/modals.html:51
msgid "Submit"
msgstr ""
-#: templates/js/translated/modals.js:136
+#: templates/js/translated/modals.js:139
msgid "Form Title"
msgstr ""
-#: templates/js/translated/modals.js:399
+#: templates/js/translated/modals.js:402
msgid "Waiting for server..."
msgstr ""
-#: templates/js/translated/modals.js:558
+#: templates/js/translated/modals.js:561
msgid "Show Error Information"
msgstr ""
-#: templates/js/translated/modals.js:616
+#: templates/js/translated/modals.js:619
msgid "Accept"
msgstr ""
-#: templates/js/translated/modals.js:673
+#: templates/js/translated/modals.js:676
msgid "Loading Data"
msgstr ""
-#: templates/js/translated/modals.js:944
+#: templates/js/translated/modals.js:947
msgid "Invalid response from server"
msgstr ""
-#: templates/js/translated/modals.js:944
+#: templates/js/translated/modals.js:947
msgid "Form data missing from server response"
msgstr ""
-#: templates/js/translated/modals.js:956
+#: templates/js/translated/modals.js:959
msgid "Error posting form data"
msgstr ""
-#: templates/js/translated/modals.js:1053
+#: templates/js/translated/modals.js:1056
msgid "JSON response missing form data"
msgstr ""
-#: templates/js/translated/modals.js:1068
+#: templates/js/translated/modals.js:1071
msgid "Error 400: Bad Request"
msgstr ""
-#: templates/js/translated/modals.js:1069
+#: templates/js/translated/modals.js:1072
msgid "Server returned error code 400"
msgstr ""
-#: templates/js/translated/modals.js:1092
+#: templates/js/translated/modals.js:1095
msgid "Error requesting form data"
msgstr ""
@@ -8660,361 +8665,377 @@ msgstr ""
msgid "Notifications will load here"
msgstr ""
-#: templates/js/translated/order.js:84
+#: templates/js/translated/order.js:85
msgid "No stock items have been allocated to this shipment"
msgstr ""
-#: templates/js/translated/order.js:89
+#: templates/js/translated/order.js:90
msgid "The following stock items will be shipped"
msgstr ""
-#: templates/js/translated/order.js:129
+#: templates/js/translated/order.js:130
msgid "Complete Shipment"
msgstr ""
-#: templates/js/translated/order.js:135
+#: templates/js/translated/order.js:141
msgid "Confirm Shipment"
msgstr ""
-#: templates/js/translated/order.js:157
+#: templates/js/translated/order.js:197
+msgid "No pending shipments found"
+msgstr ""
+
+#: templates/js/translated/order.js:201
+msgid "No stock items have been allocated to pending shipments"
+msgstr ""
+
+#: templates/js/translated/order.js:233
+msgid "Skip"
+msgstr ""
+
+#: templates/js/translated/order.js:263
msgid "Complete Purchase Order"
msgstr ""
-#: templates/js/translated/order.js:163
+#: templates/js/translated/order.js:269
msgid "Mark this order as complete?"
msgstr ""
-#: templates/js/translated/order.js:169
+#: templates/js/translated/order.js:275
msgid "All line items have been received"
msgstr ""
-#: templates/js/translated/order.js:174
+#: templates/js/translated/order.js:280
msgid "This order has line items which have not been marked as received."
msgstr ""
-#: templates/js/translated/order.js:175
+#: templates/js/translated/order.js:281
msgid "Completing this order means that the order and line items will no longer be editable."
msgstr ""
-#: templates/js/translated/order.js:198
+#: templates/js/translated/order.js:304
msgid "Cancel Purchase Order"
msgstr ""
-#: templates/js/translated/order.js:203
+#: templates/js/translated/order.js:309
msgid "Are you sure you wish to cancel this purchase order?"
msgstr ""
-#: templates/js/translated/order.js:209
+#: templates/js/translated/order.js:315
msgid "This purchase order can not be cancelled"
msgstr ""
-#: templates/js/translated/order.js:232
+#: templates/js/translated/order.js:338
msgid "Issue Purchase Order"
msgstr ""
-#: templates/js/translated/order.js:237
+#: templates/js/translated/order.js:343
msgid "After placing this purchase order, line items will no longer be editable."
msgstr ""
-#: templates/js/translated/order.js:259
+#: templates/js/translated/order.js:365
msgid "Cancel Sales Order"
msgstr ""
-#: templates/js/translated/order.js:264
+#: templates/js/translated/order.js:370
msgid "Cancelling this order means that the order will no longer be editable."
msgstr ""
-#: templates/js/translated/order.js:318
+#: templates/js/translated/order.js:424
msgid "Create New Shipment"
msgstr ""
-#: templates/js/translated/order.js:343
+#: templates/js/translated/order.js:449
msgid "Add Customer"
msgstr ""
-#: templates/js/translated/order.js:368
+#: templates/js/translated/order.js:474
msgid "Create Sales Order"
msgstr ""
-#: templates/js/translated/order.js:585
+#: templates/js/translated/order.js:691
msgid "Export Order"
msgstr ""
-#: templates/js/translated/order.js:636
+#: templates/js/translated/order.js:742
msgid "At least one purchaseable part must be selected"
msgstr ""
-#: templates/js/translated/order.js:661
+#: templates/js/translated/order.js:767
msgid "Quantity to order"
msgstr ""
-#: templates/js/translated/order.js:670
+#: templates/js/translated/order.js:776
msgid "New supplier part"
msgstr ""
-#: templates/js/translated/order.js:688
+#: templates/js/translated/order.js:794
msgid "New purchase order"
msgstr ""
-#: templates/js/translated/order.js:721
+#: templates/js/translated/order.js:827
msgid "Add to purchase order"
msgstr ""
-#: templates/js/translated/order.js:830
+#: templates/js/translated/order.js:936
msgid "No matching supplier parts"
msgstr ""
-#: templates/js/translated/order.js:845
+#: templates/js/translated/order.js:951
msgid "No matching purchase orders"
msgstr ""
-#: templates/js/translated/order.js:1001
+#: templates/js/translated/order.js:1107
msgid "Select Line Items"
msgstr ""
-#: templates/js/translated/order.js:1002
+#: templates/js/translated/order.js:1108
msgid "At least one line item must be selected"
msgstr ""
-#: templates/js/translated/order.js:1022 templates/js/translated/order.js:1121
+#: templates/js/translated/order.js:1128 templates/js/translated/order.js:1227
msgid "Add batch code"
msgstr ""
-#: templates/js/translated/order.js:1028 templates/js/translated/order.js:1132
+#: templates/js/translated/order.js:1134 templates/js/translated/order.js:1238
msgid "Add serial numbers"
msgstr ""
-#: templates/js/translated/order.js:1040
+#: templates/js/translated/order.js:1146
msgid "Quantity to receive"
msgstr ""
-#: templates/js/translated/order.js:1104 templates/js/translated/stock.js:2085
+#: templates/js/translated/order.js:1210 templates/js/translated/stock.js:2085
msgid "Stock Status"
msgstr ""
-#: templates/js/translated/order.js:1195
+#: templates/js/translated/order.js:1301
msgid "Order Code"
msgstr ""
-#: templates/js/translated/order.js:1196
+#: templates/js/translated/order.js:1302
msgid "Ordered"
msgstr ""
-#: templates/js/translated/order.js:1198
+#: templates/js/translated/order.js:1304
msgid "Quantity to Receive"
msgstr ""
-#: templates/js/translated/order.js:1217
+#: templates/js/translated/order.js:1323
msgid "Confirm receipt of items"
msgstr ""
-#: templates/js/translated/order.js:1218
+#: templates/js/translated/order.js:1324
msgid "Receive Purchase Order Items"
msgstr ""
-#: templates/js/translated/order.js:1410 templates/js/translated/part.js:870
+#: templates/js/translated/order.js:1516 templates/js/translated/part.js:870
msgid "No purchase orders found"
msgstr ""
-#: templates/js/translated/order.js:1435 templates/js/translated/order.js:2120
+#: templates/js/translated/order.js:1541 templates/js/translated/order.js:2226
msgid "Order is overdue"
msgstr ""
-#: templates/js/translated/order.js:1485 templates/js/translated/order.js:2185
-#: templates/js/translated/order.js:2315
+#: templates/js/translated/order.js:1591 templates/js/translated/order.js:2291
+#: templates/js/translated/order.js:2421
msgid "Items"
msgstr ""
-#: templates/js/translated/order.js:1559 templates/js/translated/order.js:3292
+#: templates/js/translated/order.js:1665 templates/js/translated/order.js:3447
msgid "Duplicate Line Item"
msgstr ""
-#: templates/js/translated/order.js:1576 templates/js/translated/order.js:3314
+#: templates/js/translated/order.js:1682 templates/js/translated/order.js:3469
msgid "Edit Line Item"
msgstr ""
-#: templates/js/translated/order.js:1589 templates/js/translated/order.js:3325
+#: templates/js/translated/order.js:1695 templates/js/translated/order.js:3480
msgid "Delete Line Item"
msgstr ""
-#: templates/js/translated/order.js:1632
+#: templates/js/translated/order.js:1738
msgid "No line items found"
msgstr ""
-#: templates/js/translated/order.js:1659 templates/js/translated/order.js:3049
+#: templates/js/translated/order.js:1765 templates/js/translated/order.js:3204
msgid "Total"
msgstr ""
-#: templates/js/translated/order.js:1713 templates/js/translated/order.js:1915
-#: templates/js/translated/order.js:3074 templates/js/translated/order.js:3557
+#: templates/js/translated/order.js:1819 templates/js/translated/order.js:2021
+#: templates/js/translated/order.js:3229 templates/js/translated/order.js:3714
#: templates/js/translated/part.js:1948 templates/js/translated/part.js:2301
msgid "Unit Price"
msgstr ""
-#: templates/js/translated/order.js:1728 templates/js/translated/order.js:1931
-#: templates/js/translated/order.js:3090 templates/js/translated/order.js:3573
+#: templates/js/translated/order.js:1834 templates/js/translated/order.js:2037
+#: templates/js/translated/order.js:3245 templates/js/translated/order.js:3730
msgid "Total Price"
msgstr ""
-#: templates/js/translated/order.js:1769 templates/js/translated/order.js:3132
+#: templates/js/translated/order.js:1875 templates/js/translated/order.js:3287
#: templates/js/translated/part.js:979
msgid "This line item is overdue"
msgstr ""
-#: templates/js/translated/order.js:1828 templates/js/translated/part.js:1025
+#: templates/js/translated/order.js:1934 templates/js/translated/part.js:1025
msgid "Receive line item"
msgstr ""
-#: templates/js/translated/order.js:1832 templates/js/translated/order.js:3246
+#: templates/js/translated/order.js:1938 templates/js/translated/order.js:3401
msgid "Duplicate line item"
msgstr ""
-#: templates/js/translated/order.js:1833 templates/js/translated/order.js:3247
+#: templates/js/translated/order.js:1939 templates/js/translated/order.js:3402
msgid "Edit line item"
msgstr ""
-#: templates/js/translated/order.js:1834 templates/js/translated/order.js:3251
+#: templates/js/translated/order.js:1940 templates/js/translated/order.js:3406
msgid "Delete line item"
msgstr ""
-#: templates/js/translated/order.js:1980 templates/js/translated/order.js:3622
+#: templates/js/translated/order.js:2086 templates/js/translated/order.js:3779
msgid "Duplicate line"
msgstr ""
-#: templates/js/translated/order.js:1981 templates/js/translated/order.js:3623
+#: templates/js/translated/order.js:2087 templates/js/translated/order.js:3780
msgid "Edit line"
msgstr ""
-#: templates/js/translated/order.js:1982 templates/js/translated/order.js:3624
+#: templates/js/translated/order.js:2088 templates/js/translated/order.js:3781
msgid "Delete line"
msgstr ""
-#: templates/js/translated/order.js:2012 templates/js/translated/order.js:3654
+#: templates/js/translated/order.js:2118 templates/js/translated/order.js:3811
msgid "Duplicate Line"
msgstr ""
-#: templates/js/translated/order.js:2033 templates/js/translated/order.js:3675
+#: templates/js/translated/order.js:2139 templates/js/translated/order.js:3832
msgid "Edit Line"
msgstr ""
-#: templates/js/translated/order.js:2044 templates/js/translated/order.js:3686
+#: templates/js/translated/order.js:2150 templates/js/translated/order.js:3843
msgid "Delete Line"
msgstr ""
-#: templates/js/translated/order.js:2055
+#: templates/js/translated/order.js:2161
msgid "No matching line"
msgstr ""
-#: templates/js/translated/order.js:2096
+#: templates/js/translated/order.js:2202
msgid "No sales orders found"
msgstr ""
-#: templates/js/translated/order.js:2134
+#: templates/js/translated/order.js:2240
msgid "Invalid Customer"
msgstr ""
-#: templates/js/translated/order.js:2221
+#: templates/js/translated/order.js:2327
msgid "Edit shipment"
msgstr ""
-#: templates/js/translated/order.js:2224
+#: templates/js/translated/order.js:2330
msgid "Complete shipment"
msgstr ""
-#: templates/js/translated/order.js:2229
+#: templates/js/translated/order.js:2335
msgid "Delete shipment"
msgstr ""
-#: templates/js/translated/order.js:2249
+#: templates/js/translated/order.js:2355
msgid "Edit Shipment"
msgstr ""
-#: templates/js/translated/order.js:2266
+#: templates/js/translated/order.js:2372
msgid "Delete Shipment"
msgstr ""
-#: templates/js/translated/order.js:2300
+#: templates/js/translated/order.js:2406
msgid "No matching shipments found"
msgstr ""
-#: templates/js/translated/order.js:2310
+#: templates/js/translated/order.js:2416
msgid "Shipment Reference"
msgstr ""
-#: templates/js/translated/order.js:2334
+#: templates/js/translated/order.js:2440
msgid "Not shipped"
msgstr ""
-#: templates/js/translated/order.js:2340
+#: templates/js/translated/order.js:2446
msgid "Tracking"
msgstr ""
-#: templates/js/translated/order.js:2499
+#: templates/js/translated/order.js:2603
+msgid "Add Shipment"
+msgstr ""
+
+#: templates/js/translated/order.js:2654
msgid "Confirm stock allocation"
msgstr ""
-#: templates/js/translated/order.js:2500
+#: templates/js/translated/order.js:2655
msgid "Allocate Stock Items to Sales Order"
msgstr ""
-#: templates/js/translated/order.js:2708
+#: templates/js/translated/order.js:2863
msgid "No sales order allocations found"
msgstr ""
-#: templates/js/translated/order.js:2789
+#: templates/js/translated/order.js:2944
msgid "Edit Stock Allocation"
msgstr ""
-#: templates/js/translated/order.js:2806
+#: templates/js/translated/order.js:2961
msgid "Confirm Delete Operation"
msgstr ""
-#: templates/js/translated/order.js:2807
+#: templates/js/translated/order.js:2962
msgid "Delete Stock Allocation"
msgstr ""
-#: templates/js/translated/order.js:2850 templates/js/translated/order.js:2939
+#: templates/js/translated/order.js:3005 templates/js/translated/order.js:3094
#: templates/js/translated/stock.js:1545
msgid "Shipped to customer"
msgstr ""
-#: templates/js/translated/order.js:2858 templates/js/translated/order.js:2948
+#: templates/js/translated/order.js:3013 templates/js/translated/order.js:3103
msgid "Stock location not specified"
msgstr ""
-#: templates/js/translated/order.js:3230
+#: templates/js/translated/order.js:3385
msgid "Allocate serial numbers"
msgstr ""
-#: templates/js/translated/order.js:3236
+#: templates/js/translated/order.js:3391
msgid "Purchase stock"
msgstr ""
-#: templates/js/translated/order.js:3243 templates/js/translated/order.js:3439
+#: templates/js/translated/order.js:3398 templates/js/translated/order.js:3596
msgid "Calculate price"
msgstr ""
-#: templates/js/translated/order.js:3255
+#: templates/js/translated/order.js:3410
msgid "Cannot be deleted as items have been shipped"
msgstr ""
-#: templates/js/translated/order.js:3258
+#: templates/js/translated/order.js:3413
msgid "Cannot be deleted as items have been allocated"
msgstr ""
-#: templates/js/translated/order.js:3340
+#: templates/js/translated/order.js:3495
msgid "Allocate Serial Numbers"
msgstr ""
-#: templates/js/translated/order.js:3447
+#: templates/js/translated/order.js:3604
msgid "Update Unit Price"
msgstr ""
-#: templates/js/translated/order.js:3461
+#: templates/js/translated/order.js:3618
msgid "No matching line items"
msgstr ""
-#: templates/js/translated/order.js:3697
+#: templates/js/translated/order.js:3854
msgid "No matching lines"
msgstr ""
@@ -9486,7 +9507,7 @@ msgstr ""
msgid "Add Stock"
msgstr ""
-#: templates/js/translated/stock.js:887 users/models.py:218
+#: templates/js/translated/stock.js:887 users/models.py:216
msgid "Add"
msgstr ""
@@ -10201,58 +10222,59 @@ msgstr ""
msgid "No"
msgstr ""
-#: users/admin.py:62
+#: users/admin.py:61
msgid "Users"
msgstr ""
-#: users/admin.py:63
+#: users/admin.py:62
msgid "Select which users are assigned to this group"
msgstr ""
-#: users/admin.py:185
+#: users/admin.py:184
msgid "The following users are members of multiple groups:"
msgstr ""
-#: users/admin.py:208
+#: users/admin.py:207
msgid "Personal info"
msgstr ""
-#: users/admin.py:209
+#: users/admin.py:208
msgid "Permissions"
msgstr ""
-#: users/admin.py:212
+#: users/admin.py:211
msgid "Important dates"
msgstr ""
-#: users/models.py:205
+#: users/models.py:203
msgid "Permission set"
msgstr ""
-#: users/models.py:213
+#: users/models.py:211
msgid "Group"
msgstr ""
-#: users/models.py:216
+#: users/models.py:214
msgid "View"
msgstr ""
-#: users/models.py:216
+#: users/models.py:214
msgid "Permission to view items"
msgstr ""
-#: users/models.py:218
+#: users/models.py:216
msgid "Permission to add items"
msgstr ""
-#: users/models.py:220
+#: users/models.py:218
msgid "Change"
msgstr ""
-#: users/models.py:220
+#: users/models.py:218
msgid "Permissions to edit items"
msgstr ""
-#: users/models.py:222
+#: users/models.py:220
msgid "Permission to delete items"
msgstr ""
+
diff --git a/InvenTree/locale/tr/LC_MESSAGES/django.po b/InvenTree/locale/tr/LC_MESSAGES/django.po
index 9868d62f56..b1c97e8929 100644
--- a/InvenTree/locale/tr/LC_MESSAGES/django.po
+++ b/InvenTree/locale/tr/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-05-20 10:47+0000\n"
-"PO-Revision-Date: 2022-05-21 01:06\n"
+"POT-Creation-Date: 2022-05-23 23:24+0000\n"
+"PO-Revision-Date: 2022-05-24 01:42\n"
"Last-Translator: \n"
"Language-Team: Turkish\n"
"Language: tr_TR\n"
@@ -17,20 +17,20 @@ msgstr ""
"X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 154\n"
-#: InvenTree/api.py:50
+#: InvenTree/api.py:49
msgid "API endpoint not found"
msgstr "API uç noktası bulunamadı"
-#: InvenTree/exceptions.py:47
+#: InvenTree/exceptions.py:46
msgid "Error details can be found in the admin panel"
msgstr ""
-#: InvenTree/fields.py:98
+#: InvenTree/fields.py:96
msgid "Enter date"
msgstr "Tarih giriniz"
#: InvenTree/forms.py:124 templates/account/email_confirm.html:20
-#: templates/js/translated/forms.js:615
+#: templates/js/translated/forms.js:620
msgid "Confirm"
msgstr "Onay"
@@ -79,7 +79,7 @@ msgstr "Her seferind eaynı e-posta adresini yazmalısınız."
msgid "Duplicate serial: {sn}"
msgstr "Tekrarlanan seri no:{sn}"
-#: InvenTree/helpers.py:456 order/models.py:311 order/models.py:465
+#: InvenTree/helpers.py:456 order/models.py:307 order/models.py:461
msgid "Invalid quantity provided"
msgstr "Geçersiz veri sağlandı"
@@ -116,89 +116,89 @@ msgstr "Seri numarası bulunamadı"
msgid "Number of unique serial numbers ({s}) must match quantity ({q})"
msgstr ""
-#: InvenTree/models.py:183
+#: InvenTree/models.py:181
msgid "Missing file"
msgstr "Eksik dosya"
-#: InvenTree/models.py:184
+#: InvenTree/models.py:182
msgid "Missing external link"
msgstr "Bozuk dış bağlantı"
-#: InvenTree/models.py:195 stock/models.py:2211
+#: InvenTree/models.py:193 stock/models.py:2202
#: templates/js/translated/attachment.js:119
msgid "Attachment"
msgstr "Ek"
-#: InvenTree/models.py:196
+#: InvenTree/models.py:194
msgid "Select file to attach"
msgstr "Eklenecek dosyayı seç"
-#: InvenTree/models.py:202 company/models.py:129 company/models.py:343
-#: company/models.py:575 order/models.py:136 part/models.py:867
+#: InvenTree/models.py:200 company/models.py:123 company/models.py:337
+#: company/models.py:569 order/models.py:132 part/models.py:855
#: report/templates/report/inventree_build_order_base.html:165
#: templates/js/translated/company.js:540
#: templates/js/translated/company.js:829 templates/js/translated/part.js:1441
msgid "Link"
msgstr "Bağlantı"
-#: InvenTree/models.py:203 build/models.py:330 part/models.py:868
-#: stock/models.py:674
+#: InvenTree/models.py:201 build/models.py:330 part/models.py:856
+#: stock/models.py:665
msgid "Link to external URL"
msgstr "Harici URL'ye bağlantı"
-#: InvenTree/models.py:206 templates/js/translated/attachment.js:163
+#: InvenTree/models.py:204 templates/js/translated/attachment.js:163
msgid "Comment"
msgstr "Yorum"
-#: InvenTree/models.py:206
+#: InvenTree/models.py:204
msgid "File comment"
msgstr "Dosya yorumu"
-#: InvenTree/models.py:212 InvenTree/models.py:213 common/models.py:1571
-#: common/models.py:1572 common/models.py:1806 common/models.py:1807
-#: common/models.py:2034 common/models.py:2035 part/models.py:2369
-#: part/models.py:2389 plugin/models.py:261 plugin/models.py:262
+#: InvenTree/models.py:210 InvenTree/models.py:211 common/models.py:1567
+#: common/models.py:1568 common/models.py:1802 common/models.py:1803
+#: common/models.py:2030 common/models.py:2031 part/models.py:2357
+#: part/models.py:2377 plugin/models.py:260 plugin/models.py:261
#: report/templates/report/inventree_test_report_base.html:96
#: templates/js/translated/stock.js:2518
msgid "User"
msgstr "Kullanıcı"
-#: InvenTree/models.py:216
+#: InvenTree/models.py:214
msgid "upload date"
msgstr "yükleme tarihi"
-#: InvenTree/models.py:239
+#: InvenTree/models.py:237
msgid "Filename must not be empty"
msgstr "Dosya adı boş olamaz"
-#: InvenTree/models.py:262
+#: InvenTree/models.py:260
msgid "Invalid attachment directory"
msgstr "Ek dosya yolu geçersiz"
-#: InvenTree/models.py:272
+#: InvenTree/models.py:270
#, python-brace-format
msgid "Filename contains illegal character '{c}'"
msgstr "Dosya adı geçersiz karakterler içeriyor'{c}'"
-#: InvenTree/models.py:275
+#: InvenTree/models.py:273
msgid "Filename missing extension"
msgstr "Dosya uzantısı yok"
-#: InvenTree/models.py:282
+#: InvenTree/models.py:280
msgid "Attachment with this filename already exists"
msgstr "Aynı isimli başka bir dosya zaten var"
-#: InvenTree/models.py:289
+#: InvenTree/models.py:287
msgid "Error renaming file"
msgstr "Dosya adı değiştirilirken hata"
-#: InvenTree/models.py:324
+#: InvenTree/models.py:322
msgid "Invalid choice"
msgstr "Geçersiz seçim"
-#: InvenTree/models.py:340 InvenTree/models.py:341 common/models.py:1792
-#: company/models.py:426 label/models.py:109 part/models.py:811
-#: part/models.py:2553 plugin/models.py:100 report/models.py:174
+#: InvenTree/models.py:338 InvenTree/models.py:339 common/models.py:1788
+#: company/models.py:420 label/models.py:104 part/models.py:799
+#: part/models.py:2541 plugin/models.py:99 report/models.py:169
#: templates/InvenTree/notifications/notifications.html:84
#: templates/InvenTree/settings/mixins/urls.html:13
#: templates/InvenTree/settings/plugin.html:49
@@ -211,23 +211,23 @@ msgstr "Geçersiz seçim"
msgid "Name"
msgstr "Adı"
-#: InvenTree/models.py:347 build/models.py:207
-#: build/templates/build/detail.html:24 company/models.py:349
-#: company/models.py:581 company/templates/company/company_base.html:71
+#: InvenTree/models.py:345 build/models.py:207
+#: build/templates/build/detail.html:24 company/models.py:343
+#: company/models.py:575 company/templates/company/company_base.html:71
#: company/templates/company/manufacturer_part.html:75
-#: company/templates/company/supplier_part.html:73 label/models.py:116
-#: order/models.py:134 part/models.py:834 part/templates/part/category.html:74
+#: company/templates/company/supplier_part.html:73 label/models.py:111
+#: order/models.py:130 part/models.py:822 part/templates/part/category.html:74
#: part/templates/part/part_base.html:167
-#: part/templates/part/set_category.html:14 report/models.py:187
-#: report/models.py:552 report/models.py:591
+#: part/templates/part/set_category.html:14 report/models.py:182
+#: report/models.py:547 report/models.py:586
#: report/templates/report/inventree_build_order_base.html:118
#: stock/templates/stock/location.html:103
#: templates/InvenTree/settings/plugin_settings.html:33
#: templates/js/translated/bom.js:553 templates/js/translated/bom.js:872
#: templates/js/translated/build.js:2408 templates/js/translated/company.js:345
#: templates/js/translated/company.js:551
-#: templates/js/translated/company.js:840 templates/js/translated/order.js:1456
-#: templates/js/translated/order.js:1664 templates/js/translated/order.js:2148
+#: templates/js/translated/company.js:840 templates/js/translated/order.js:1562
+#: templates/js/translated/order.js:1770 templates/js/translated/order.js:2254
#: templates/js/translated/part.js:674 templates/js/translated/part.js:1082
#: templates/js/translated/part.js:1355 templates/js/translated/part.js:1755
#: templates/js/translated/part.js:1824 templates/js/translated/stock.js:1686
@@ -235,173 +235,173 @@ msgstr "Adı"
msgid "Description"
msgstr "Açıklama"
-#: InvenTree/models.py:348
+#: InvenTree/models.py:346
msgid "Description (optional)"
msgstr "Açıklama (isteğe bağlı)"
-#: InvenTree/models.py:356
+#: InvenTree/models.py:354
msgid "parent"
msgstr "üst"
-#: InvenTree/serializers.py:62 part/models.py:2886
+#: InvenTree/serializers.py:59 part/models.py:2874
msgid "Must be a valid number"
msgstr "Geçerli bir numara olmalı"
-#: InvenTree/serializers.py:296
+#: InvenTree/serializers.py:293
msgid "Filename"
msgstr "Dosya adı"
-#: InvenTree/serializers.py:331
+#: InvenTree/serializers.py:328
msgid "Invalid value"
msgstr "Geçersiz değer"
-#: InvenTree/serializers.py:352
+#: InvenTree/serializers.py:349
msgid "Data File"
msgstr "Veri Dosyası"
-#: InvenTree/serializers.py:353
+#: InvenTree/serializers.py:350
msgid "Select data file for upload"
msgstr "Yüklemek istediğiniz dosyayı seçin"
-#: InvenTree/serializers.py:377
+#: InvenTree/serializers.py:374
msgid "Unsupported file type"
msgstr "Desteklenmeyen dsoya tipi"
-#: InvenTree/serializers.py:383
+#: InvenTree/serializers.py:380
msgid "File is too large"
msgstr "Dosya boyutu çok büyük"
-#: InvenTree/serializers.py:404
+#: InvenTree/serializers.py:401
msgid "No columns found in file"
msgstr "Dosyada kolon bulunamadı"
-#: InvenTree/serializers.py:407
+#: InvenTree/serializers.py:404
msgid "No data rows found in file"
msgstr "Dosyada satır bulunamadı"
-#: InvenTree/serializers.py:533
+#: InvenTree/serializers.py:530
msgid "No data rows provided"
msgstr "Dosyada satır bulunamadı"
-#: InvenTree/serializers.py:536
+#: InvenTree/serializers.py:533
msgid "No data columns supplied"
msgstr "Dosyada uygun kolon bulunamadı"
-#: InvenTree/serializers.py:623
+#: InvenTree/serializers.py:620
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Gerekli kolon ismi eksik:'{name}'"
-#: InvenTree/serializers.py:632
+#: InvenTree/serializers.py:629
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Tekrarlanan kolon ismi:'{col}'"
-#: InvenTree/settings.py:672
+#: InvenTree/settings.py:669
msgid "Czech"
msgstr ""
-#: InvenTree/settings.py:673
+#: InvenTree/settings.py:670
msgid "German"
msgstr "Almanca"
-#: InvenTree/settings.py:674
+#: InvenTree/settings.py:671
msgid "Greek"
msgstr "Yunanca"
-#: InvenTree/settings.py:675
+#: InvenTree/settings.py:672
msgid "English"
msgstr "İngilizce"
-#: InvenTree/settings.py:676
+#: InvenTree/settings.py:673
msgid "Spanish"
msgstr "İspanyolca"
-#: InvenTree/settings.py:677
+#: InvenTree/settings.py:674
msgid "Spanish (Mexican)"
msgstr "İspanyolca(Meksika)"
-#: InvenTree/settings.py:678
+#: InvenTree/settings.py:675
msgid "Farsi / Persian"
msgstr ""
-#: InvenTree/settings.py:679
+#: InvenTree/settings.py:676
msgid "French"
msgstr "Fransızca"
-#: InvenTree/settings.py:680
+#: InvenTree/settings.py:677
msgid "Hebrew"
msgstr "İbranice"
-#: InvenTree/settings.py:681
+#: InvenTree/settings.py:678
msgid "Hungarian"
msgstr "Macarca"
-#: InvenTree/settings.py:682
+#: InvenTree/settings.py:679
msgid "Italian"
msgstr "İtalyanca"
-#: InvenTree/settings.py:683
+#: InvenTree/settings.py:680
msgid "Japanese"
msgstr "Japonca"
-#: InvenTree/settings.py:684
+#: InvenTree/settings.py:681
msgid "Korean"
msgstr "Korece"
-#: InvenTree/settings.py:685
+#: InvenTree/settings.py:682
msgid "Dutch"
msgstr "Flemenkçe"
-#: InvenTree/settings.py:686
+#: InvenTree/settings.py:683
msgid "Norwegian"
msgstr "Norveççe"
-#: InvenTree/settings.py:687
+#: InvenTree/settings.py:684
msgid "Polish"
msgstr "Polonyaca"
-#: InvenTree/settings.py:688
+#: InvenTree/settings.py:685
msgid "Portuguese"
msgstr ""
-#: InvenTree/settings.py:689
+#: InvenTree/settings.py:686
msgid "Portuguese (Brazilian)"
msgstr ""
-#: InvenTree/settings.py:690
+#: InvenTree/settings.py:687
msgid "Russian"
msgstr "Rusça"
-#: InvenTree/settings.py:691
+#: InvenTree/settings.py:688
msgid "Swedish"
msgstr "İsveççe"
-#: InvenTree/settings.py:692
+#: InvenTree/settings.py:689
msgid "Thai"
msgstr "Tay dili"
-#: InvenTree/settings.py:693
+#: InvenTree/settings.py:690
msgid "Turkish"
msgstr "Türkçe"
-#: InvenTree/settings.py:694
+#: InvenTree/settings.py:691
msgid "Vietnamese"
msgstr "Vietnamca"
-#: InvenTree/settings.py:695
+#: InvenTree/settings.py:692
msgid "Chinese"
msgstr "Çince"
-#: InvenTree/status.py:110
+#: InvenTree/status.py:108
msgid "Background worker check failed"
msgstr "Arka plan çalışanı kontrolü başarısız oldu"
-#: InvenTree/status.py:114
+#: InvenTree/status.py:112
msgid "Email backend not configured"
msgstr "E-posta arka ucu yapılandırılmadı"
-#: InvenTree/status.py:117
+#: InvenTree/status.py:115
msgid "InvenTree system health checks failed"
msgstr "InvenTree sistem sağlık kontrolü başarısız"
@@ -416,7 +416,7 @@ msgstr "Sipariş verildi"
#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:326
#: order/templates/order/order_base.html:134
-#: order/templates/order/sales_order_base.html:132
+#: order/templates/order/sales_order_base.html:133
msgid "Complete"
msgstr "Tamamlandı"
@@ -435,8 +435,8 @@ msgstr "Kayıp"
msgid "Returned"
msgstr "İade"
-#: InvenTree/status_codes.py:143 order/models.py:1087
-#: templates/js/translated/order.js:2871 templates/js/translated/order.js:3188
+#: InvenTree/status_codes.py:143 order/models.py:1083
+#: templates/js/translated/order.js:3026 templates/js/translated/order.js:3343
msgid "Shipped"
msgstr "Sevk edildi"
@@ -552,63 +552,63 @@ msgstr "Satın alma emri karşılığında alındı"
msgid "Production"
msgstr "Üretim"
-#: InvenTree/validators.py:25
+#: InvenTree/validators.py:23
msgid "Not a valid currency code"
msgstr "Geçerli bir para birimi kodu değil"
-#: InvenTree/validators.py:53
+#: InvenTree/validators.py:51
msgid "Invalid character in part name"
msgstr "Parça adında geçersiz karakter"
-#: InvenTree/validators.py:66
+#: InvenTree/validators.py:64
#, python-brace-format
msgid "IPN must match regex pattern {pat}"
msgstr "IPN regex kalıbıyla eşleşmelidir {pat}"
-#: InvenTree/validators.py:80 InvenTree/validators.py:94
-#: InvenTree/validators.py:108
+#: InvenTree/validators.py:78 InvenTree/validators.py:92
+#: InvenTree/validators.py:106
#, python-brace-format
msgid "Reference must match pattern {pattern}"
msgstr "Referans {pattern} deseniyle mutlaka eşleşmeli"
-#: InvenTree/validators.py:116
+#: InvenTree/validators.py:114
#, python-brace-format
msgid "Illegal character in name ({x})"
msgstr "({x}) adında geçersiz karakter"
-#: InvenTree/validators.py:137 InvenTree/validators.py:153
+#: InvenTree/validators.py:135 InvenTree/validators.py:151
msgid "Overage value must not be negative"
msgstr "Fazlalık değeri negatif olmamalıdır"
-#: InvenTree/validators.py:155
+#: InvenTree/validators.py:153
msgid "Overage must not exceed 100%"
msgstr "Fazlalık %100'ü geçmemelidir"
-#: InvenTree/validators.py:162
+#: InvenTree/validators.py:160
msgid "Invalid value for overage"
msgstr ""
-#: InvenTree/views.py:535
+#: InvenTree/views.py:534
msgid "Delete Item"
msgstr "Ögeyi Sil"
-#: InvenTree/views.py:584
+#: InvenTree/views.py:583
msgid "Check box to confirm item deletion"
msgstr "Öge silme işlemini onaylamak için kutuyu işaretleyin"
-#: InvenTree/views.py:599 templates/InvenTree/settings/user.html:22
+#: InvenTree/views.py:598 templates/InvenTree/settings/user.html:22
msgid "Edit User Information"
msgstr "Kullanıcı Bilgisini Düzenle"
-#: InvenTree/views.py:610 templates/InvenTree/settings/user.html:19
+#: InvenTree/views.py:609 templates/InvenTree/settings/user.html:19
msgid "Set Password"
msgstr "Şifre Belirle"
-#: InvenTree/views.py:629
+#: InvenTree/views.py:628
msgid "Password fields must match"
msgstr "Parola alanları eşleşmelidir"
-#: InvenTree/views.py:876 templates/navbar.html:152
+#: InvenTree/views.py:875 templates/navbar.html:152
msgid "System Information"
msgstr "Sistem Bilgisi"
@@ -629,7 +629,7 @@ msgstr "Yapım İşi Emri"
#: order/templates/order/so_sidebar.html:13
#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221
#: templates/InvenTree/search.html:139
-#: templates/InvenTree/settings/sidebar.html:45 users/models.py:44
+#: templates/InvenTree/settings/sidebar.html:45 users/models.py:42
msgid "Build Orders"
msgstr "Yapım İşi Emirleri"
@@ -637,15 +637,15 @@ msgstr "Yapım İşi Emirleri"
msgid "Build Order Reference"
msgstr "Yapım İşi Emri Referansı"
-#: build/models.py:199 order/models.py:241 order/models.py:593
-#: order/models.py:888 part/models.py:2797
+#: build/models.py:199 order/models.py:237 order/models.py:589
+#: order/models.py:884 part/models.py:2785
#: part/templates/part/upload_bom.html:54
#: report/templates/report/inventree_po_report.html:91
#: report/templates/report/inventree_so_report.html:92
#: templates/js/translated/bom.js:688 templates/js/translated/bom.js:879
-#: templates/js/translated/build.js:1794 templates/js/translated/order.js:1695
-#: templates/js/translated/order.js:1896 templates/js/translated/order.js:3055
-#: templates/js/translated/order.js:3538
+#: templates/js/translated/build.js:1794 templates/js/translated/order.js:1801
+#: templates/js/translated/order.js:2002 templates/js/translated/order.js:3210
+#: templates/js/translated/order.js:3695
msgid "Reference"
msgstr "Referans"
@@ -663,12 +663,12 @@ msgid "BuildOrder to which this build is allocated"
msgstr "Bu yapım işinin tahsis edildiği yapım işi emri"
#: build/models.py:225 build/templates/build/build_base.html:77
-#: build/templates/build/detail.html:29 company/models.py:717
-#: order/models.py:987 order/models.py:1076 part/models.py:366
-#: part/models.py:2315 part/models.py:2331 part/models.py:2350
-#: part/models.py:2367 part/models.py:2469 part/models.py:2591
-#: part/models.py:2681 part/models.py:2772 part/models.py:3062
-#: part/serializers.py:922 part/templates/part/part_app_base.html:8
+#: build/templates/build/detail.html:29 company/models.py:711
+#: order/models.py:983 order/models.py:1072 part/models.py:354
+#: part/models.py:2303 part/models.py:2319 part/models.py:2338
+#: part/models.py:2355 part/models.py:2457 part/models.py:2579
+#: part/models.py:2669 part/models.py:2760 part/models.py:3050
+#: part/serializers.py:917 part/templates/part/part_app_base.html:8
#: part/templates/part/part_pricing.html:12
#: part/templates/part/set_category.html:13
#: part/templates/part/upload_bom.html:52
@@ -683,10 +683,10 @@ msgstr "Bu yapım işinin tahsis edildiği yapım işi emri"
#: templates/js/translated/build.js:1158 templates/js/translated/build.js:1664
#: templates/js/translated/build.js:2100 templates/js/translated/build.js:2413
#: templates/js/translated/company.js:492
-#: templates/js/translated/company.js:749 templates/js/translated/order.js:93
-#: templates/js/translated/order.js:762 templates/js/translated/order.js:1194
-#: templates/js/translated/order.js:1649 templates/js/translated/order.js:2475
-#: templates/js/translated/order.js:2824 templates/js/translated/order.js:3039
+#: templates/js/translated/company.js:749 templates/js/translated/order.js:94
+#: templates/js/translated/order.js:868 templates/js/translated/order.js:1300
+#: templates/js/translated/order.js:1755 templates/js/translated/order.js:2581
+#: templates/js/translated/order.js:2979 templates/js/translated/order.js:3194
#: templates/js/translated/part.js:1067 templates/js/translated/part.js:1137
#: templates/js/translated/part.js:1333 templates/js/translated/stock.js:531
#: templates/js/translated/stock.js:696 templates/js/translated/stock.js:903
@@ -708,7 +708,7 @@ msgid "SalesOrder to which this build is allocated"
msgstr "Bu yapım işinin tahsis edildiği satış emri"
#: build/models.py:247 build/serializers.py:790
-#: templates/js/translated/build.js:2088 templates/js/translated/order.js:2463
+#: templates/js/translated/build.js:2088 templates/js/translated/order.js:2569
msgid "Source Location"
msgstr "Kaynak Konum"
@@ -748,8 +748,8 @@ msgstr "Yapım İşi Durumu"
msgid "Build status code"
msgstr "Yapım işi durum kodu"
-#: build/models.py:285 build/serializers.py:220 order/serializers.py:445
-#: stock/models.py:678 templates/js/translated/order.js:1054
+#: build/models.py:285 build/serializers.py:220 order/serializers.py:440
+#: stock/models.py:669 templates/js/translated/order.js:1160
msgid "Batch Code"
msgstr "Sıra numarası"
@@ -757,12 +757,12 @@ msgstr "Sıra numarası"
msgid "Batch code for this build output"
msgstr "Yapım işi çıktısı için sıra numarası"
-#: build/models.py:292 order/models.py:138 part/models.py:1006
-#: part/templates/part/part_base.html:305 templates/js/translated/order.js:2161
+#: build/models.py:292 order/models.py:134 part/models.py:994
+#: part/templates/part/part_base.html:305 templates/js/translated/order.js:2267
msgid "Creation Date"
msgstr "Oluşturulma tarihi"
-#: build/models.py:296 order/models.py:615
+#: build/models.py:296 order/models.py:611
msgid "Target completion date"
msgstr "Hedef tamamlama tarihi"
@@ -770,7 +770,7 @@ msgstr "Hedef tamamlama tarihi"
msgid "Target date for build completion. Build will be overdue after this date."
msgstr "Yapım işinin tamamlanması için hedef tarih. Bu tarihten sonra yapım işi gecikmiş olacak."
-#: build/models.py:300 order/models.py:284
+#: build/models.py:300 order/models.py:280
#: templates/js/translated/build.js:2490
msgid "Completion Date"
msgstr "Tamamlama tarihi"
@@ -788,11 +788,11 @@ msgid "User who issued this build order"
msgstr "Bu yapım işi emrini veren kullanıcı"
#: build/models.py:323 build/templates/build/build_base.html:190
-#: build/templates/build/detail.html:115 order/models.py:152
+#: build/templates/build/detail.html:115 order/models.py:148
#: order/templates/order/order_base.html:176
-#: order/templates/order/sales_order_base.html:182 part/models.py:1010
+#: order/templates/order/sales_order_base.html:183 part/models.py:998
#: report/templates/report/inventree_build_order_base.html:159
-#: templates/js/translated/build.js:2470 templates/js/translated/order.js:1490
+#: templates/js/translated/build.js:2470 templates/js/translated/order.js:1596
msgid "Responsible"
msgstr "Sorumlu"
@@ -803,27 +803,27 @@ msgstr "Bu yapım işi emrinden sorumlu kullanıcı"
#: build/models.py:329 build/templates/build/detail.html:101
#: company/templates/company/manufacturer_part.html:107
#: company/templates/company/supplier_part.html:132
-#: part/templates/part/part_base.html:346 stock/models.py:672
+#: part/templates/part/part_base.html:346 stock/models.py:663
#: stock/templates/stock/item_base.html:363
msgid "External Link"
msgstr "Harici Bağlantı"
#: build/models.py:334 build/serializers.py:390
-#: build/templates/build/sidebar.html:21 company/models.py:140
-#: company/models.py:588 company/templates/company/sidebar.html:25
-#: order/models.py:156 order/models.py:890 order/models.py:1197
+#: build/templates/build/sidebar.html:21 company/models.py:134
+#: company/models.py:582 company/templates/company/sidebar.html:25
+#: order/models.py:152 order/models.py:886 order/models.py:1193
#: order/templates/order/po_sidebar.html:11
-#: order/templates/order/so_sidebar.html:17 part/models.py:995
+#: order/templates/order/so_sidebar.html:17 part/models.py:983
#: part/templates/part/part_sidebar.html:59
#: report/templates/report/inventree_build_order_base.html:173
-#: stock/models.py:745 stock/models.py:2111 stock/models.py:2217
-#: stock/serializers.py:329 stock/serializers.py:467 stock/serializers.py:736
-#: stock/serializers.py:834 stock/serializers.py:966
+#: stock/models.py:736 stock/models.py:2102 stock/models.py:2208
+#: stock/serializers.py:321 stock/serializers.py:459 stock/serializers.py:728
+#: stock/serializers.py:826 stock/serializers.py:958
#: stock/templates/stock/stock_sidebar.html:25
#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1065
-#: templates/js/translated/company.js:845 templates/js/translated/order.js:1816
-#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2344
-#: templates/js/translated/order.js:3213 templates/js/translated/order.js:3609
+#: templates/js/translated/company.js:845 templates/js/translated/order.js:1922
+#: templates/js/translated/order.js:2073 templates/js/translated/order.js:2450
+#: templates/js/translated/order.js:3368 templates/js/translated/order.js:3766
#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1922
msgid "Notes"
msgstr "Notlar"
@@ -857,7 +857,7 @@ msgstr ""
msgid "Stock item is over-allocated"
msgstr "Stok kalemi fazladan tahsis edilmiş"
-#: build/models.py:1238 order/models.py:1324
+#: build/models.py:1238 order/models.py:1329
msgid "Allocation quantity must be greater than zero"
msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır"
@@ -879,16 +879,16 @@ msgstr "Yapım İşi"
msgid "Build to allocate parts"
msgstr "Yapım işi için tahsis edilen parçalar"
-#: build/models.py:1392 build/serializers.py:631 order/serializers.py:958
-#: order/serializers.py:976 stock/serializers.py:401 stock/serializers.py:674
-#: stock/serializers.py:792 stock/templates/stock/item_base.html:10
+#: build/models.py:1392 build/serializers.py:631 order/serializers.py:961
+#: order/serializers.py:979 stock/serializers.py:393 stock/serializers.py:666
+#: stock/serializers.py:784 stock/templates/stock/item_base.html:10
#: stock/templates/stock/item_base.html:23
#: stock/templates/stock/item_base.html:357
#: templates/js/translated/build.js:738 templates/js/translated/build.js:743
#: templates/js/translated/build.js:2102 templates/js/translated/build.js:2538
-#: templates/js/translated/order.js:94 templates/js/translated/order.js:2476
-#: templates/js/translated/order.js:2731 templates/js/translated/order.js:2736
-#: templates/js/translated/order.js:2831 templates/js/translated/order.js:2921
+#: templates/js/translated/order.js:95 templates/js/translated/order.js:2582
+#: templates/js/translated/order.js:2886 templates/js/translated/order.js:2891
+#: templates/js/translated/order.js:2986 templates/js/translated/order.js:3076
#: templates/js/translated/stock.js:532 templates/js/translated/stock.js:697
#: templates/js/translated/stock.js:2454
msgid "Stock Item"
@@ -900,11 +900,11 @@ msgstr "Kaynak stok kalemi"
#: build/models.py:1405 build/serializers.py:190
#: build/templates/build/build_base.html:82
-#: build/templates/build/detail.html:34 common/models.py:1614
-#: company/forms.py:39 company/templates/company/supplier_part.html:258
-#: order/models.py:881 order/models.py:1364 order/serializers.py:1097
-#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:123
-#: part/forms.py:139 part/forms.py:155 part/models.py:2788
+#: build/templates/build/detail.html:34 common/models.py:1610
+#: company/forms.py:38 company/templates/company/supplier_part.html:258
+#: order/models.py:877 order/models.py:1369 order/serializers.py:1100
+#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:121
+#: part/forms.py:137 part/forms.py:153 part/models.py:2776
#: part/templates/part/detail.html:953 part/templates/part/detail.html:1039
#: part/templates/part/part_pricing.html:16
#: part/templates/part/upload_bom.html:53
@@ -913,7 +913,7 @@ msgstr "Kaynak stok kalemi"
#: report/templates/report/inventree_so_report.html:91
#: report/templates/report/inventree_test_report_base.html:81
#: report/templates/report/inventree_test_report_base.html:139
-#: stock/serializers.py:290 stock/templates/stock/item_base.html:187
+#: stock/serializers.py:282 stock/templates/stock/item_base.html:187
#: stock/templates/stock/item_base.html:252
#: stock/templates/stock/item_base.html:260
#: templates/js/translated/barcode.js:437 templates/js/translated/bom.js:689
@@ -922,11 +922,11 @@ msgstr "Kaynak stok kalemi"
#: templates/js/translated/build.js:1180 templates/js/translated/build.js:1690
#: templates/js/translated/build.js:2103
#: templates/js/translated/model_renderers.js:108
-#: templates/js/translated/order.js:110 templates/js/translated/order.js:765
-#: templates/js/translated/order.js:1701 templates/js/translated/order.js:1902
-#: templates/js/translated/order.js:2477 templates/js/translated/order.js:2750
-#: templates/js/translated/order.js:2838 templates/js/translated/order.js:2927
-#: templates/js/translated/order.js:3061 templates/js/translated/order.js:3544
+#: templates/js/translated/order.js:111 templates/js/translated/order.js:871
+#: templates/js/translated/order.js:1807 templates/js/translated/order.js:2008
+#: templates/js/translated/order.js:2583 templates/js/translated/order.js:2905
+#: templates/js/translated/order.js:2993 templates/js/translated/order.js:3082
+#: templates/js/translated/order.js:3216 templates/js/translated/order.js:3701
#: templates/js/translated/part.js:967 templates/js/translated/part.js:1969
#: templates/js/translated/part.js:2200 templates/js/translated/part.js:2234
#: templates/js/translated/part.js:2312 templates/js/translated/stock.js:403
@@ -972,10 +972,10 @@ msgstr ""
msgid "Enter quantity for build output"
msgstr "Yapım işi çıktısı için miktarını girin"
-#: build/serializers.py:203 build/serializers.py:651 order/models.py:309
-#: order/serializers.py:294 order/serializers.py:440 part/serializers.py:593
-#: part/serializers.py:1089 stock/models.py:505 stock/models.py:1316
-#: stock/serializers.py:302
+#: build/serializers.py:203 build/serializers.py:651 order/models.py:305
+#: order/serializers.py:289 order/serializers.py:435 part/serializers.py:588
+#: part/serializers.py:1084 stock/models.py:496 stock/models.py:1307
+#: stock/serializers.py:294
msgid "Quantity must be greater than zero"
msgstr ""
@@ -987,8 +987,8 @@ msgstr ""
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:227 order/serializers.py:453 order/serializers.py:1101
-#: stock/serializers.py:311 templates/js/translated/order.js:1065
+#: build/serializers.py:227 order/serializers.py:448 order/serializers.py:1104
+#: stock/serializers.py:303 templates/js/translated/order.js:1171
#: templates/js/translated/stock.js:238 templates/js/translated/stock.js:404
msgid "Serial Numbers"
msgstr "Seri Numaraları"
@@ -1005,7 +1005,7 @@ msgstr ""
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:276 stock/api.py:602
+#: build/serializers.py:276 stock/api.py:590
msgid "The following serial numbers already exist"
msgstr ""
@@ -1013,14 +1013,14 @@ msgstr ""
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:372 order/serializers.py:426 order/serializers.py:531
-#: stock/serializers.py:322 stock/serializers.py:462 stock/serializers.py:827
-#: stock/serializers.py:1068 stock/templates/stock/item_base.html:303
+#: build/serializers.py:372 order/serializers.py:421 order/serializers.py:526
+#: stock/serializers.py:314 stock/serializers.py:454 stock/serializers.py:819
+#: stock/serializers.py:1060 stock/templates/stock/item_base.html:303
#: templates/js/translated/barcode.js:436
#: templates/js/translated/barcode.js:618 templates/js/translated/build.js:750
-#: templates/js/translated/build.js:1702 templates/js/translated/order.js:1092
-#: templates/js/translated/order.js:2743 templates/js/translated/order.js:2846
-#: templates/js/translated/order.js:2854 templates/js/translated/order.js:2935
+#: templates/js/translated/build.js:1702 templates/js/translated/order.js:1198
+#: templates/js/translated/order.js:2898 templates/js/translated/order.js:3001
+#: templates/js/translated/order.js:3009 templates/js/translated/order.js:3090
#: templates/js/translated/part.js:180 templates/js/translated/stock.js:533
#: templates/js/translated/stock.js:698 templates/js/translated/stock.js:905
#: templates/js/translated/stock.js:1793 templates/js/translated/stock.js:2395
@@ -1032,11 +1032,11 @@ msgid "Location for completed build outputs"
msgstr ""
#: build/serializers.py:379 build/templates/build/build_base.html:142
-#: build/templates/build/detail.html:62 order/models.py:609
-#: order/serializers.py:463 stock/templates/stock/item_base.html:193
+#: build/templates/build/detail.html:62 order/models.py:605
+#: order/serializers.py:458 stock/templates/stock/item_base.html:193
#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2442
-#: templates/js/translated/order.js:1199 templates/js/translated/order.js:1460
-#: templates/js/translated/order.js:2153 templates/js/translated/stock.js:1768
+#: templates/js/translated/order.js:1305 templates/js/translated/order.js:1566
+#: templates/js/translated/order.js:2259 templates/js/translated/stock.js:1768
#: templates/js/translated/stock.js:2472 templates/js/translated/stock.js:2604
msgid "Status"
msgstr "Durum"
@@ -1097,8 +1097,8 @@ msgstr ""
msgid "No build outputs have been created for this build order"
msgstr ""
-#: build/serializers.py:556 build/serializers.py:605 part/models.py:2912
-#: part/models.py:3054
+#: build/serializers.py:556 build/serializers.py:605 part/models.py:2900
+#: part/models.py:3042
msgid "BOM Item"
msgstr ""
@@ -1114,11 +1114,11 @@ msgstr ""
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:637 stock/serializers.py:681
+#: build/serializers.py:637 stock/serializers.py:673
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:694 order/serializers.py:1009
+#: build/serializers.py:694 order/serializers.py:1012
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
@@ -1135,7 +1135,7 @@ msgstr ""
msgid "This stock item has already been allocated to this build output"
msgstr ""
-#: build/serializers.py:739 order/serializers.py:1271
+#: build/serializers.py:739 order/serializers.py:1274
msgid "Allocation items must be provided"
msgstr ""
@@ -1233,13 +1233,13 @@ msgid "Stock has not been fully allocated to this Build Order"
msgstr "Stok, yapım işi emri için tamamen tahsis edilemedi"
#: build/templates/build/build_base.html:151
-#: build/templates/build/detail.html:131 order/models.py:894
+#: build/templates/build/detail.html:131 order/models.py:890
#: order/templates/order/order_base.html:162
-#: order/templates/order/sales_order_base.html:163
+#: order/templates/order/sales_order_base.html:164
#: report/templates/report/inventree_build_order_base.html:126
-#: templates/js/translated/build.js:2482 templates/js/translated/order.js:1477
-#: templates/js/translated/order.js:1763 templates/js/translated/order.js:2169
-#: templates/js/translated/order.js:3124 templates/js/translated/part.js:971
+#: templates/js/translated/build.js:2482 templates/js/translated/order.js:1583
+#: templates/js/translated/order.js:1869 templates/js/translated/order.js:2275
+#: templates/js/translated/order.js:3279 templates/js/translated/part.js:971
msgid "Target Date"
msgstr "Hedeflenen tarih"
@@ -1251,7 +1251,7 @@ msgstr "Bu yapım işinin %(target)s tarihinde süresi doluyor"
#: build/templates/build/build_base.html:156
#: build/templates/build/build_base.html:201
#: order/templates/order/order_base.html:98
-#: order/templates/order/sales_order_base.html:93
+#: order/templates/order/sales_order_base.html:94
#: templates/js/translated/table_filters.js:312
#: templates/js/translated/table_filters.js:353
#: templates/js/translated/table_filters.js:383
@@ -1260,20 +1260,20 @@ msgstr "Vadesi geçmiş"
#: build/templates/build/build_base.html:163
#: build/templates/build/detail.html:67 build/templates/build/detail.html:142
-#: order/templates/order/sales_order_base.html:170
+#: order/templates/order/sales_order_base.html:171
#: templates/js/translated/table_filters.js:392
msgid "Completed"
msgstr "Tamamlandı"
#: build/templates/build/build_base.html:176
-#: build/templates/build/detail.html:94 order/models.py:1073
-#: order/models.py:1169 order/models.py:1268
+#: build/templates/build/detail.html:94 order/models.py:1069
+#: order/models.py:1165 order/models.py:1273
#: order/templates/order/sales_order_base.html:9
#: order/templates/order/sales_order_base.html:28
#: report/templates/report/inventree_build_order_base.html:136
#: report/templates/report/inventree_so_report.html:77
#: stock/templates/stock/item_base.html:297
-#: templates/js/translated/order.js:2108
+#: templates/js/translated/order.js:2214
msgid "Sales Order"
msgstr "Sipariş Emri"
@@ -1308,8 +1308,8 @@ msgstr "Stok Kaynağı"
msgid "Stock can be taken from any available location."
msgstr "Stok herhangi bir konumdan alınabilir."
-#: build/templates/build/detail.html:49 order/models.py:1009
-#: templates/js/translated/order.js:1200 templates/js/translated/order.js:1805
+#: build/templates/build/detail.html:49 order/models.py:1005
+#: templates/js/translated/order.js:1306 templates/js/translated/order.js:1911
msgid "Destination"
msgstr "Hedef"
@@ -1334,7 +1334,7 @@ msgstr "Toplu"
#: build/templates/build/detail.html:126
#: order/templates/order/order_base.html:149
-#: order/templates/order/sales_order_base.html:157
+#: order/templates/order/sales_order_base.html:158
#: templates/js/translated/build.js:2450
msgid "Created"
msgstr "Oluşturuldu"
@@ -1386,7 +1386,7 @@ msgstr "Gerekli parçaları sipariş edin"
#: build/templates/build/detail.html:187
#: company/templates/company/detail.html:37
#: company/templates/company/detail.html:84
-#: part/templates/part/category.html:177 templates/js/translated/order.js:805
+#: part/templates/part/category.html:177 templates/js/translated/order.js:911
msgid "Order Parts"
msgstr "Parça Siparişi"
@@ -1516,23 +1516,23 @@ msgstr ""
msgid "Delete Build Order"
msgstr "Yapım İşi Emrini Sil"
-#: common/files.py:65
+#: common/files.py:66
msgid "Unsupported file format: {ext.upper()}"
msgstr "Desteklenmeyen dosya formatı: {ext.upper()}"
-#: common/files.py:67
+#: common/files.py:68
msgid "Error reading file (invalid encoding)"
msgstr "Dosya okurken hata (geçersiz biçim)"
-#: common/files.py:72
+#: common/files.py:73
msgid "Error reading file (invalid format)"
msgstr "Dosya okurken hata (geçersiz biçim)"
-#: common/files.py:74
+#: common/files.py:75
msgid "Error reading file (incorrect dimension)"
msgstr "Dosya okurken hata (hatalı ölçüler)"
-#: common/files.py:76
+#: common/files.py:77
msgid "Error reading file (data could be corrupted)"
msgstr "Dosya okurken hata (veri bozulmuş olabilir)"
@@ -1553,888 +1553,888 @@ msgstr "{name.title()} Dosya"
msgid "Select {name} file to upload"
msgstr "{name} dosyasını yüklemek için seçin"
-#: common/models.py:398
+#: common/models.py:394
msgid "Settings key (must be unique - case insensitive)"
msgstr ""
-#: common/models.py:400
+#: common/models.py:396
msgid "Settings value"
msgstr ""
-#: common/models.py:441
+#: common/models.py:437
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:461
+#: common/models.py:457
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:472
+#: common/models.py:468
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:521
+#: common/models.py:517
msgid "Key string must be unique"
msgstr "Anahtar dizesi benzersiz olmalı"
-#: common/models.py:743
+#: common/models.py:739
msgid "No group"
msgstr ""
-#: common/models.py:785
+#: common/models.py:781
msgid "Restart required"
msgstr ""
-#: common/models.py:786
+#: common/models.py:782
msgid "A setting has been changed which requires a server restart"
msgstr ""
-#: common/models.py:793
+#: common/models.py:789
msgid "Server Instance Name"
msgstr ""
-#: common/models.py:795
+#: common/models.py:791
msgid "String descriptor for the server instance"
msgstr ""
-#: common/models.py:799
+#: common/models.py:795
msgid "Use instance name"
msgstr ""
-#: common/models.py:800
+#: common/models.py:796
msgid "Use the instance name in the title-bar"
msgstr ""
-#: common/models.py:806
+#: common/models.py:802
msgid "Restrict showing `about`"
msgstr ""
-#: common/models.py:807
+#: common/models.py:803
msgid "Show the `about` modal only to superusers"
msgstr ""
-#: common/models.py:813 company/models.py:98 company/models.py:99
+#: common/models.py:809 company/models.py:92 company/models.py:93
msgid "Company name"
msgstr "Şirket adı"
-#: common/models.py:814
+#: common/models.py:810
msgid "Internal company name"
msgstr ""
-#: common/models.py:819
+#: common/models.py:815
msgid "Base URL"
msgstr "Ana URL"
-#: common/models.py:820
+#: common/models.py:816
msgid "Base URL for server instance"
msgstr ""
-#: common/models.py:826
+#: common/models.py:822
msgid "Default Currency"
msgstr "Varsayılan Para Birimi"
-#: common/models.py:827
+#: common/models.py:823
msgid "Default currency"
msgstr "Varsayılan para birimi"
-#: common/models.py:833
+#: common/models.py:829
msgid "Download from URL"
msgstr "URL'den indir"
-#: common/models.py:834
+#: common/models.py:830
msgid "Allow download of remote images and files from external URL"
msgstr "Harici URL'den resim ve dosyaların indirilmesine izin ver"
-#: common/models.py:840 templates/InvenTree/settings/sidebar.html:33
+#: common/models.py:836 templates/InvenTree/settings/sidebar.html:33
msgid "Barcode Support"
msgstr "Barkod Desteği"
-#: common/models.py:841
+#: common/models.py:837
msgid "Enable barcode scanner support"
msgstr "Barkod tarayıcı desteğini etkinleştir"
-#: common/models.py:847
+#: common/models.py:843
msgid "Barcode Webcam Support"
msgstr ""
-#: common/models.py:848
+#: common/models.py:844
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/models.py:854
+#: common/models.py:850
msgid "IPN Regex"
msgstr "DPN Regex"
-#: common/models.py:855
+#: common/models.py:851
msgid "Regular expression pattern for matching Part IPN"
msgstr "Parça DPN eşleştirmesi için Düzenli İfade Kalıbı (Regex)"
-#: common/models.py:859
+#: common/models.py:855
msgid "Allow Duplicate IPN"
msgstr "Yinelenen DPN'ye İzin Ver"
-#: common/models.py:860
+#: common/models.py:856
msgid "Allow multiple parts to share the same IPN"
msgstr "Birden çok parçanın aynı DPN'yi paylaşmasına izin ver"
-#: common/models.py:866
+#: common/models.py:862
msgid "Allow Editing IPN"
msgstr "DPN Düzenlemeye İzin Ver"
-#: common/models.py:867
+#: common/models.py:863
msgid "Allow changing the IPN value while editing a part"
msgstr "Parçayı düzenlerken DPN değiştirmeye izin ver"
-#: common/models.py:873
+#: common/models.py:869
msgid "Copy Part BOM Data"
msgstr ""
-#: common/models.py:874
+#: common/models.py:870
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/models.py:880
+#: common/models.py:876
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/models.py:881
+#: common/models.py:877
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/models.py:887
+#: common/models.py:883
msgid "Copy Part Test Data"
msgstr ""
-#: common/models.py:888
+#: common/models.py:884
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/models.py:894
+#: common/models.py:890
msgid "Copy Category Parameter Templates"
msgstr "Kategori Paremetre Sablonu Kopyala"
-#: common/models.py:895
+#: common/models.py:891
msgid "Copy category parameter templates when creating a part"
msgstr "Parça oluştururken kategori parametre şablonlarını kopyala"
-#: common/models.py:901 part/models.py:2593 report/models.py:180
+#: common/models.py:897 part/models.py:2581 report/models.py:175
#: templates/js/translated/table_filters.js:38
#: templates/js/translated/table_filters.js:444
msgid "Template"
msgstr "Şablon"
-#: common/models.py:902
+#: common/models.py:898
msgid "Parts are templates by default"
msgstr "Parçaları varsayılan olan şablondur"
-#: common/models.py:908 part/models.py:958 templates/js/translated/bom.js:1411
+#: common/models.py:904 part/models.py:946 templates/js/translated/bom.js:1411
#: templates/js/translated/table_filters.js:168
#: templates/js/translated/table_filters.js:460
msgid "Assembly"
msgstr "Montaj"
-#: common/models.py:909
+#: common/models.py:905
msgid "Parts can be assembled from other components by default"
msgstr "Parçalar varsayılan olarak başka bileşenlerden monte edilebilir"
-#: common/models.py:915 part/models.py:964
+#: common/models.py:911 part/models.py:952
#: templates/js/translated/table_filters.js:464
msgid "Component"
msgstr "Bileşen"
-#: common/models.py:916
+#: common/models.py:912
msgid "Parts can be used as sub-components by default"
msgstr "Parçalar varsayılan olarak alt bileşen olarak kullanılabilir"
-#: common/models.py:922 part/models.py:975
+#: common/models.py:918 part/models.py:963
msgid "Purchaseable"
msgstr "Satın Alınabilir"
-#: common/models.py:923
+#: common/models.py:919
msgid "Parts are purchaseable by default"
msgstr "Parçalar varsayılan olarak satın alınabilir"
-#: common/models.py:929 part/models.py:980
+#: common/models.py:925 part/models.py:968
#: templates/js/translated/table_filters.js:472
msgid "Salable"
msgstr "Satılabilir"
-#: common/models.py:930
+#: common/models.py:926
msgid "Parts are salable by default"
msgstr "Parçalar varsayılan olarak satılabilir"
-#: common/models.py:936 part/models.py:970
+#: common/models.py:932 part/models.py:958
#: templates/js/translated/table_filters.js:46
#: templates/js/translated/table_filters.js:100
#: templates/js/translated/table_filters.js:476
msgid "Trackable"
msgstr "Takip Edilebilir"
-#: common/models.py:937
+#: common/models.py:933
msgid "Parts are trackable by default"
msgstr "Parçalar varsayılan olarak takip edilebilir"
-#: common/models.py:943 part/models.py:990
+#: common/models.py:939 part/models.py:978
#: part/templates/part/part_base.html:151
#: templates/js/translated/table_filters.js:42
msgid "Virtual"
msgstr "Sanal"
-#: common/models.py:944
+#: common/models.py:940
msgid "Parts are virtual by default"
msgstr "Parçalar varsayılan olarak sanaldır"
-#: common/models.py:950
+#: common/models.py:946
msgid "Show Import in Views"
msgstr ""
-#: common/models.py:951
+#: common/models.py:947
msgid "Display the import wizard in some part views"
msgstr ""
-#: common/models.py:957
+#: common/models.py:953
msgid "Show Price in Forms"
msgstr "Formlarda Fiyat Göster"
-#: common/models.py:958
+#: common/models.py:954
msgid "Display part price in some forms"
msgstr ""
-#: common/models.py:969
+#: common/models.py:965
msgid "Show Price in BOM"
msgstr ""
-#: common/models.py:970
+#: common/models.py:966
msgid "Include pricing information in BOM tables"
msgstr ""
-#: common/models.py:981
+#: common/models.py:977
msgid "Show Price History"
msgstr ""
-#: common/models.py:982
+#: common/models.py:978
msgid "Display historical pricing for Part"
msgstr ""
-#: common/models.py:988
+#: common/models.py:984
msgid "Show related parts"
msgstr "İlgili parçaları göster"
-#: common/models.py:989
+#: common/models.py:985
msgid "Display related parts for a part"
msgstr ""
-#: common/models.py:995
+#: common/models.py:991
msgid "Create initial stock"
msgstr ""
-#: common/models.py:996
+#: common/models.py:992
msgid "Create initial stock on part creation"
msgstr ""
-#: common/models.py:1002
+#: common/models.py:998
msgid "Internal Prices"
msgstr ""
-#: common/models.py:1003
+#: common/models.py:999
msgid "Enable internal prices for parts"
msgstr ""
-#: common/models.py:1009
+#: common/models.py:1005
msgid "Internal Price as BOM-Price"
msgstr ""
-#: common/models.py:1010
+#: common/models.py:1006
msgid "Use the internal price (if set) in BOM-price calculations"
msgstr ""
-#: common/models.py:1016
+#: common/models.py:1012
msgid "Part Name Display Format"
msgstr ""
-#: common/models.py:1017
+#: common/models.py:1013
msgid "Format to display the part name"
msgstr ""
-#: common/models.py:1024
+#: common/models.py:1020
msgid "Enable Reports"
msgstr ""
-#: common/models.py:1025
+#: common/models.py:1021
msgid "Enable generation of reports"
msgstr ""
-#: common/models.py:1031 templates/stats.html:25
+#: common/models.py:1027 templates/stats.html:25
msgid "Debug Mode"
msgstr "Hata Ayıklama Modu"
-#: common/models.py:1032
+#: common/models.py:1028
msgid "Generate reports in debug mode (HTML output)"
msgstr "Raporları hata ayıklama modunda üret (HTML çıktısı)"
-#: common/models.py:1038
+#: common/models.py:1034
msgid "Page Size"
msgstr "Sayfa Boyutu"
-#: common/models.py:1039
+#: common/models.py:1035
msgid "Default page size for PDF reports"
msgstr "PDF raporlar için varsayılan sayfa boyutu"
-#: common/models.py:1049
+#: common/models.py:1045
msgid "Test Reports"
msgstr "Test Raporları"
-#: common/models.py:1050
+#: common/models.py:1046
msgid "Enable generation of test reports"
msgstr ""
-#: common/models.py:1056
+#: common/models.py:1052
msgid "Batch Code Template"
msgstr ""
-#: common/models.py:1057
+#: common/models.py:1053
msgid "Template for generating default batch codes for stock items"
msgstr ""
-#: common/models.py:1062
+#: common/models.py:1058
msgid "Stock Expiry"
msgstr ""
-#: common/models.py:1063
+#: common/models.py:1059
msgid "Enable stock expiry functionality"
msgstr ""
-#: common/models.py:1069
+#: common/models.py:1065
msgid "Sell Expired Stock"
msgstr ""
-#: common/models.py:1070
+#: common/models.py:1066
msgid "Allow sale of expired stock"
msgstr ""
-#: common/models.py:1076
+#: common/models.py:1072
msgid "Stock Stale Time"
msgstr ""
-#: common/models.py:1077
+#: common/models.py:1073
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/models.py:1079
+#: common/models.py:1075
msgid "days"
msgstr "günler"
-#: common/models.py:1084
+#: common/models.py:1080
msgid "Build Expired Stock"
msgstr ""
-#: common/models.py:1085
+#: common/models.py:1081
msgid "Allow building with expired stock"
msgstr ""
-#: common/models.py:1091
+#: common/models.py:1087
msgid "Stock Ownership Control"
msgstr ""
-#: common/models.py:1092
+#: common/models.py:1088
msgid "Enable ownership control over stock locations and items"
msgstr "Stok konumu ve ögeler üzerinde sahiplik kontrolünü etkinleştirin"
-#: common/models.py:1098
+#: common/models.py:1094
msgid "Build Order Reference Prefix"
msgstr ""
-#: common/models.py:1099
+#: common/models.py:1095
msgid "Prefix value for build order reference"
msgstr ""
-#: common/models.py:1104
+#: common/models.py:1100
msgid "Build Order Reference Regex"
msgstr ""
-#: common/models.py:1105
+#: common/models.py:1101
msgid "Regular expression pattern for matching build order reference"
msgstr ""
-#: common/models.py:1109
+#: common/models.py:1105
msgid "Sales Order Reference Prefix"
msgstr ""
-#: common/models.py:1110
+#: common/models.py:1106
msgid "Prefix value for sales order reference"
msgstr ""
-#: common/models.py:1115
+#: common/models.py:1111
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/models.py:1116
+#: common/models.py:1112
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/models.py:1122
+#: common/models.py:1118
msgid "Purchase Order Reference Prefix"
msgstr ""
-#: common/models.py:1123
+#: common/models.py:1119
msgid "Prefix value for purchase order reference"
msgstr ""
-#: common/models.py:1129
+#: common/models.py:1125
msgid "Enable password forgot"
msgstr ""
-#: common/models.py:1130
+#: common/models.py:1126
msgid "Enable password forgot function on the login pages"
msgstr ""
-#: common/models.py:1136
+#: common/models.py:1132
msgid "Enable registration"
msgstr ""
-#: common/models.py:1137
+#: common/models.py:1133
msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/models.py:1143
+#: common/models.py:1139
msgid "Enable SSO"
msgstr ""
-#: common/models.py:1144
+#: common/models.py:1140
msgid "Enable SSO on the login pages"
msgstr ""
-#: common/models.py:1150
+#: common/models.py:1146
msgid "Email required"
msgstr ""
-#: common/models.py:1151
+#: common/models.py:1147
msgid "Require user to supply mail on signup"
msgstr ""
-#: common/models.py:1157
+#: common/models.py:1153
msgid "Auto-fill SSO users"
msgstr ""
-#: common/models.py:1158
+#: common/models.py:1154
msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
-#: common/models.py:1164
+#: common/models.py:1160
msgid "Mail twice"
msgstr ""
-#: common/models.py:1165
+#: common/models.py:1161
msgid "On signup ask users twice for their mail"
msgstr ""
-#: common/models.py:1171
+#: common/models.py:1167
msgid "Password twice"
msgstr ""
-#: common/models.py:1172
+#: common/models.py:1168
msgid "On signup ask users twice for their password"
msgstr ""
-#: common/models.py:1178
+#: common/models.py:1174
msgid "Group on signup"
msgstr ""
-#: common/models.py:1179
+#: common/models.py:1175
msgid "Group to which new users are assigned on registration"
msgstr ""
-#: common/models.py:1185
+#: common/models.py:1181
msgid "Enforce MFA"
msgstr ""
-#: common/models.py:1186
+#: common/models.py:1182
msgid "Users must use multifactor security."
msgstr ""
-#: common/models.py:1192
+#: common/models.py:1188
msgid "Check plugins on startup"
msgstr ""
-#: common/models.py:1193
+#: common/models.py:1189
msgid "Check that all plugins are installed on startup - enable in container enviroments"
msgstr ""
-#: common/models.py:1201
+#: common/models.py:1197
msgid "Enable URL integration"
msgstr ""
-#: common/models.py:1202
+#: common/models.py:1198
msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/models.py:1209
+#: common/models.py:1205
msgid "Enable navigation integration"
msgstr ""
-#: common/models.py:1210
+#: common/models.py:1206
msgid "Enable plugins to integrate into navigation"
msgstr ""
-#: common/models.py:1217
+#: common/models.py:1213
msgid "Enable app integration"
msgstr ""
-#: common/models.py:1218
+#: common/models.py:1214
msgid "Enable plugins to add apps"
msgstr ""
-#: common/models.py:1225
+#: common/models.py:1221
msgid "Enable schedule integration"
msgstr ""
-#: common/models.py:1226
+#: common/models.py:1222
msgid "Enable plugins to run scheduled tasks"
msgstr ""
-#: common/models.py:1233
+#: common/models.py:1229
msgid "Enable event integration"
msgstr ""
-#: common/models.py:1234
+#: common/models.py:1230
msgid "Enable plugins to respond to internal events"
msgstr ""
-#: common/models.py:1249 common/models.py:1564
+#: common/models.py:1245 common/models.py:1560
msgid "Settings key (must be unique - case insensitive"
msgstr ""
-#: common/models.py:1280
+#: common/models.py:1276
msgid "Show subscribed parts"
msgstr ""
-#: common/models.py:1281
+#: common/models.py:1277
msgid "Show subscribed parts on the homepage"
msgstr ""
-#: common/models.py:1287
+#: common/models.py:1283
msgid "Show subscribed categories"
msgstr ""
-#: common/models.py:1288
+#: common/models.py:1284
msgid "Show subscribed part categories on the homepage"
msgstr ""
-#: common/models.py:1294
+#: common/models.py:1290
msgid "Show latest parts"
msgstr ""
-#: common/models.py:1295
+#: common/models.py:1291
msgid "Show latest parts on the homepage"
msgstr ""
-#: common/models.py:1301
+#: common/models.py:1297
msgid "Recent Part Count"
msgstr ""
-#: common/models.py:1302
+#: common/models.py:1298
msgid "Number of recent parts to display on index page"
msgstr ""
-#: common/models.py:1308
+#: common/models.py:1304
msgid "Show unvalidated BOMs"
msgstr ""
-#: common/models.py:1309
+#: common/models.py:1305
msgid "Show BOMs that await validation on the homepage"
msgstr ""
-#: common/models.py:1315
+#: common/models.py:1311
msgid "Show recent stock changes"
msgstr ""
-#: common/models.py:1316
+#: common/models.py:1312
msgid "Show recently changed stock items on the homepage"
msgstr ""
-#: common/models.py:1322
+#: common/models.py:1318
msgid "Recent Stock Count"
msgstr ""
-#: common/models.py:1323
+#: common/models.py:1319
msgid "Number of recent stock items to display on index page"
msgstr ""
-#: common/models.py:1329
+#: common/models.py:1325
msgid "Show low stock"
msgstr ""
-#: common/models.py:1330
+#: common/models.py:1326
msgid "Show low stock items on the homepage"
msgstr ""
-#: common/models.py:1336
+#: common/models.py:1332
msgid "Show depleted stock"
msgstr ""
-#: common/models.py:1337
+#: common/models.py:1333
msgid "Show depleted stock items on the homepage"
msgstr ""
-#: common/models.py:1343
+#: common/models.py:1339
msgid "Show needed stock"
msgstr ""
-#: common/models.py:1344
+#: common/models.py:1340
msgid "Show stock items needed for builds on the homepage"
msgstr ""
-#: common/models.py:1350
+#: common/models.py:1346
msgid "Show expired stock"
msgstr ""
-#: common/models.py:1351
+#: common/models.py:1347
msgid "Show expired stock items on the homepage"
msgstr ""
-#: common/models.py:1357
+#: common/models.py:1353
msgid "Show stale stock"
msgstr ""
-#: common/models.py:1358
+#: common/models.py:1354
msgid "Show stale stock items on the homepage"
msgstr ""
-#: common/models.py:1364
+#: common/models.py:1360
msgid "Show pending builds"
msgstr ""
-#: common/models.py:1365
+#: common/models.py:1361
msgid "Show pending builds on the homepage"
msgstr ""
-#: common/models.py:1371
+#: common/models.py:1367
msgid "Show overdue builds"
msgstr ""
-#: common/models.py:1372
+#: common/models.py:1368
msgid "Show overdue builds on the homepage"
msgstr ""
-#: common/models.py:1378
+#: common/models.py:1374
msgid "Show outstanding POs"
msgstr ""
-#: common/models.py:1379
+#: common/models.py:1375
msgid "Show outstanding POs on the homepage"
msgstr ""
-#: common/models.py:1385
+#: common/models.py:1381
msgid "Show overdue POs"
msgstr ""
-#: common/models.py:1386
+#: common/models.py:1382
msgid "Show overdue POs on the homepage"
msgstr ""
-#: common/models.py:1392
+#: common/models.py:1388
msgid "Show outstanding SOs"
msgstr ""
-#: common/models.py:1393
+#: common/models.py:1389
msgid "Show outstanding SOs on the homepage"
msgstr ""
-#: common/models.py:1399
+#: common/models.py:1395
msgid "Show overdue SOs"
msgstr ""
-#: common/models.py:1400
+#: common/models.py:1396
msgid "Show overdue SOs on the homepage"
msgstr ""
-#: common/models.py:1405
+#: common/models.py:1401
msgid "Enable label printing"
msgstr ""
-#: common/models.py:1406
+#: common/models.py:1402
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/models.py:1412
+#: common/models.py:1408
msgid "Inline label display"
msgstr ""
-#: common/models.py:1413
+#: common/models.py:1409
msgid "Display PDF labels in the browser, instead of downloading as a file"
msgstr ""
-#: common/models.py:1419
+#: common/models.py:1415
msgid "Inline report display"
msgstr ""
-#: common/models.py:1420
+#: common/models.py:1416
msgid "Display PDF reports in the browser, instead of downloading as a file"
msgstr ""
-#: common/models.py:1426
+#: common/models.py:1422
msgid "Search Parts"
msgstr ""
-#: common/models.py:1427
+#: common/models.py:1423
msgid "Display parts in search preview window"
msgstr ""
-#: common/models.py:1433
+#: common/models.py:1429
msgid "Hide Inactive Parts"
msgstr ""
-#: common/models.py:1434
+#: common/models.py:1430
msgid "Excluded inactive parts from search preview window"
msgstr ""
-#: common/models.py:1440
+#: common/models.py:1436
msgid "Search Categories"
msgstr ""
-#: common/models.py:1441
+#: common/models.py:1437
msgid "Display part categories in search preview window"
msgstr ""
-#: common/models.py:1447
+#: common/models.py:1443
msgid "Search Stock"
msgstr ""
-#: common/models.py:1448
+#: common/models.py:1444
msgid "Display stock items in search preview window"
msgstr ""
-#: common/models.py:1454
+#: common/models.py:1450
msgid "Hide Unavailable Stock Items"
msgstr ""
-#: common/models.py:1455
+#: common/models.py:1451
msgid "Exclude stock items which are not available from the search preview window"
msgstr ""
-#: common/models.py:1461
+#: common/models.py:1457
msgid "Search Locations"
msgstr ""
-#: common/models.py:1462
+#: common/models.py:1458
msgid "Display stock locations in search preview window"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1464
msgid "Search Companies"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1465
msgid "Display companies in search preview window"
msgstr ""
-#: common/models.py:1475
+#: common/models.py:1471
msgid "Search Purchase Orders"
msgstr ""
-#: common/models.py:1476
+#: common/models.py:1472
msgid "Display purchase orders in search preview window"
msgstr ""
-#: common/models.py:1482
+#: common/models.py:1478
msgid "Exclude Inactive Purchase Orders"
msgstr ""
-#: common/models.py:1483
+#: common/models.py:1479
msgid "Exclude inactive purchase orders from search preview window"
msgstr ""
-#: common/models.py:1489
+#: common/models.py:1485
msgid "Search Sales Orders"
msgstr ""
-#: common/models.py:1490
+#: common/models.py:1486
msgid "Display sales orders in search preview window"
msgstr ""
-#: common/models.py:1496
+#: common/models.py:1492
msgid "Exclude Inactive Sales Orders"
msgstr ""
-#: common/models.py:1497
+#: common/models.py:1493
msgid "Exclude inactive sales orders from search preview window"
msgstr ""
-#: common/models.py:1503
+#: common/models.py:1499
msgid "Search Preview Results"
msgstr ""
-#: common/models.py:1504
+#: common/models.py:1500
msgid "Number of results to show in each section of the search preview window"
msgstr ""
-#: common/models.py:1510
+#: common/models.py:1506
msgid "Show Quantity in Forms"
msgstr "Formlarda Miktarı Göster"
-#: common/models.py:1511
+#: common/models.py:1507
msgid "Display available part quantity in some forms"
msgstr ""
-#: common/models.py:1517
+#: common/models.py:1513
msgid "Escape Key Closes Forms"
msgstr ""
-#: common/models.py:1518
+#: common/models.py:1514
msgid "Use the escape key to close modal forms"
msgstr ""
-#: common/models.py:1524
+#: common/models.py:1520
msgid "Fixed Navbar"
msgstr ""
-#: common/models.py:1525
+#: common/models.py:1521
msgid "The navbar position is fixed to the top of the screen"
msgstr ""
-#: common/models.py:1531
+#: common/models.py:1527
msgid "Date Format"
msgstr ""
-#: common/models.py:1532
+#: common/models.py:1528
msgid "Preferred format for displaying dates"
msgstr ""
-#: common/models.py:1546 part/templates/part/detail.html:39
+#: common/models.py:1542 part/templates/part/detail.html:39
msgid "Part Scheduling"
msgstr ""
-#: common/models.py:1547
+#: common/models.py:1543
msgid "Display part scheduling information"
msgstr ""
-#: common/models.py:1615 company/forms.py:40
+#: common/models.py:1611 company/forms.py:39
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1622 company/serializers.py:288
-#: company/templates/company/supplier_part.html:263 order/models.py:921
+#: common/models.py:1618 company/serializers.py:285
+#: company/templates/company/supplier_part.html:263 order/models.py:917
#: templates/js/translated/part.js:998 templates/js/translated/part.js:1974
msgid "Price"
msgstr "Fiyat"
-#: common/models.py:1623
+#: common/models.py:1619
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1783 common/models.py:1920
+#: common/models.py:1779 common/models.py:1916
msgid "Endpoint"
msgstr ""
-#: common/models.py:1784
+#: common/models.py:1780
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1793
+#: common/models.py:1789
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1798 part/models.py:985 plugin/models.py:106
+#: common/models.py:1794 part/models.py:973 plugin/models.py:105
#: templates/js/translated/table_filters.js:34
#: templates/js/translated/table_filters.js:96
#: templates/js/translated/table_filters.js:308
@@ -2442,79 +2442,79 @@ msgstr ""
msgid "Active"
msgstr "Aktif"
-#: common/models.py:1799
+#: common/models.py:1795
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1813
+#: common/models.py:1809
msgid "Token"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1810
msgid "Token for access"
msgstr ""
-#: common/models.py:1821
+#: common/models.py:1817
msgid "Secret"
msgstr ""
-#: common/models.py:1822
+#: common/models.py:1818
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1887
+#: common/models.py:1883
msgid "Message ID"
msgstr ""
-#: common/models.py:1888
+#: common/models.py:1884
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1896
+#: common/models.py:1892
msgid "Host"
msgstr ""
-#: common/models.py:1897
+#: common/models.py:1893
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1904
+#: common/models.py:1900
msgid "Header"
msgstr ""
-#: common/models.py:1905
+#: common/models.py:1901
msgid "Header of this message"
msgstr ""
-#: common/models.py:1911
+#: common/models.py:1907
msgid "Body"
msgstr ""
-#: common/models.py:1912
+#: common/models.py:1908
msgid "Body of this message"
msgstr ""
-#: common/models.py:1921
+#: common/models.py:1917
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1926
+#: common/models.py:1922
msgid "Worked on"
msgstr ""
-#: common/models.py:1927
+#: common/models.py:1923
msgid "Was the work on this message finished?"
msgstr ""
#: common/views.py:90 order/templates/order/purchase_order_detail.html:23
-#: order/views.py:119 part/views.py:205
+#: order/views.py:115 part/views.py:194
#: templates/patterns/wizard/upload.html:37
msgid "Upload File"
msgstr "Dosya Yükle"
-#: common/views.py:91 order/views.py:120
+#: common/views.py:91 order/views.py:116
#: part/templates/part/import_wizard/ajax_match_fields.html:45
-#: part/views.py:206 templates/patterns/wizard/match_fields.html:51
+#: part/views.py:195 templates/patterns/wizard/match_fields.html:51
msgid "Match Fields"
msgstr "Alanları Eşleştir"
@@ -2537,118 +2537,118 @@ msgstr ""
msgid "Previous Step"
msgstr ""
-#: company/forms.py:21 part/forms.py:43
+#: company/forms.py:20 part/forms.py:41
#: templates/InvenTree/settings/mixins/urls.html:14
msgid "URL"
msgstr ""
-#: company/forms.py:22 part/forms.py:44
+#: company/forms.py:21 part/forms.py:42
msgid "Image URL"
msgstr ""
-#: company/models.py:103
+#: company/models.py:97
msgid "Company description"
msgstr ""
-#: company/models.py:104
+#: company/models.py:98
msgid "Description of the company"
msgstr ""
-#: company/models.py:110 company/templates/company/company_base.html:100
+#: company/models.py:104 company/templates/company/company_base.html:100
#: templates/InvenTree/settings/plugin_settings.html:55
#: templates/js/translated/company.js:349
msgid "Website"
msgstr ""
-#: company/models.py:111
+#: company/models.py:105
msgid "Company website URL"
msgstr "Şirket web sitesi"
-#: company/models.py:115 company/templates/company/company_base.html:118
+#: company/models.py:109 company/templates/company/company_base.html:118
msgid "Address"
msgstr "Adres"
-#: company/models.py:116
+#: company/models.py:110
msgid "Company address"
msgstr "Şirket adresi"
-#: company/models.py:119
+#: company/models.py:113
msgid "Phone number"
msgstr "Telefon numarası"
-#: company/models.py:120
+#: company/models.py:114
msgid "Contact phone number"
msgstr "İletişim telefon numarası"
-#: company/models.py:123 company/templates/company/company_base.html:132
+#: company/models.py:117 company/templates/company/company_base.html:132
#: templates/InvenTree/settings/user.html:48
msgid "Email"
msgstr "E-posta"
-#: company/models.py:123
+#: company/models.py:117
msgid "Contact email address"
msgstr "İletişim e-posta adresi"
-#: company/models.py:126 company/templates/company/company_base.html:139
+#: company/models.py:120 company/templates/company/company_base.html:139
msgid "Contact"
msgstr "İletişim"
-#: company/models.py:127
+#: company/models.py:121
msgid "Point of contact"
msgstr ""
-#: company/models.py:129
+#: company/models.py:123
msgid "Link to external company information"
msgstr ""
-#: company/models.py:137 part/models.py:877
+#: company/models.py:131 part/models.py:865
msgid "Image"
msgstr "Resim"
-#: company/models.py:142
+#: company/models.py:136
msgid "is customer"
msgstr "müşteri mi"
-#: company/models.py:142
+#: company/models.py:136
msgid "Do you sell items to this company?"
msgstr "Bu şirkete ürün satıyor musunuz?"
-#: company/models.py:144
+#: company/models.py:138
msgid "is supplier"
msgstr "tedarikçi mi"
-#: company/models.py:144
+#: company/models.py:138
msgid "Do you purchase items from this company?"
msgstr "Bu şirketten ürün satın alıyor musunuz?"
-#: company/models.py:146
+#: company/models.py:140
msgid "is manufacturer"
msgstr "üretici mi"
-#: company/models.py:146
+#: company/models.py:140
msgid "Does this company manufacture parts?"
msgstr "Bu şirket üretim yapıyor mu?"
-#: company/models.py:150 company/serializers.py:294
-#: company/templates/company/company_base.html:106 part/serializers.py:156
-#: part/serializers.py:188 stock/serializers.py:176
+#: company/models.py:144 company/serializers.py:291
+#: company/templates/company/company_base.html:106 part/serializers.py:151
+#: part/serializers.py:183 stock/serializers.py:168
msgid "Currency"
msgstr "Para birimi"
-#: company/models.py:153
+#: company/models.py:147
msgid "Default currency used for this company"
msgstr "Bu şirket için varsayılan para birimi"
-#: company/models.py:315 company/models.py:546 stock/models.py:616
+#: company/models.py:309 company/models.py:540 stock/models.py:607
#: stock/templates/stock/item_base.html:148 templates/js/translated/bom.js:542
msgid "Base Part"
msgstr "Temel Parça"
-#: company/models.py:319 company/models.py:550
+#: company/models.py:313 company/models.py:544
msgid "Select part"
msgstr "Parça seçin"
-#: company/models.py:330 company/templates/company/company_base.html:76
+#: company/models.py:324 company/templates/company/company_base.html:76
#: company/templates/company/manufacturer_part.html:90
#: company/templates/company/supplier_part.html:103
#: stock/templates/stock/item_base.html:370
@@ -2659,146 +2659,146 @@ msgstr "Parça seçin"
msgid "Manufacturer"
msgstr "Üretici"
-#: company/models.py:331 templates/js/translated/part.js:236
+#: company/models.py:325 templates/js/translated/part.js:236
msgid "Select manufacturer"
msgstr "Üretici seçin"
-#: company/models.py:337 company/templates/company/manufacturer_part.html:101
+#: company/models.py:331 company/templates/company/manufacturer_part.html:101
#: company/templates/company/supplier_part.html:111
#: templates/js/translated/company.js:533
-#: templates/js/translated/company.js:818 templates/js/translated/order.js:1683
+#: templates/js/translated/company.js:818 templates/js/translated/order.js:1789
#: templates/js/translated/part.js:246 templates/js/translated/part.js:956
msgid "MPN"
msgstr "ÜPN"
-#: company/models.py:338 templates/js/translated/part.js:247
+#: company/models.py:332 templates/js/translated/part.js:247
msgid "Manufacturer Part Number"
msgstr "Üretici Parça Numarası"
-#: company/models.py:344
+#: company/models.py:338
msgid "URL for external manufacturer part link"
msgstr ""
-#: company/models.py:350
+#: company/models.py:344
msgid "Manufacturer part description"
msgstr ""
-#: company/models.py:397 company/models.py:420 company/models.py:569
+#: company/models.py:391 company/models.py:414 company/models.py:563
#: company/templates/company/manufacturer_part.html:7
#: company/templates/company/manufacturer_part.html:24
#: stock/templates/stock/item_base.html:380
msgid "Manufacturer Part"
msgstr ""
-#: company/models.py:427
+#: company/models.py:421
msgid "Parameter name"
msgstr "Parametre adı"
-#: company/models.py:433
+#: company/models.py:427
#: report/templates/report/inventree_test_report_base.html:95
-#: stock/models.py:2204 templates/js/translated/company.js:647
+#: stock/models.py:2195 templates/js/translated/company.js:647
#: templates/js/translated/part.js:776 templates/js/translated/stock.js:1304
msgid "Value"
msgstr "Değer"
-#: company/models.py:434
+#: company/models.py:428
msgid "Parameter value"
msgstr "Parametre değeri"
-#: company/models.py:440 part/models.py:952 part/models.py:2561
+#: company/models.py:434 part/models.py:940 part/models.py:2549
#: part/templates/part/part_base.html:280
#: templates/InvenTree/settings/settings.html:332
#: templates/js/translated/company.js:653 templates/js/translated/part.js:782
msgid "Units"
msgstr ""
-#: company/models.py:441
+#: company/models.py:435
msgid "Parameter units"
msgstr ""
-#: company/models.py:513
+#: company/models.py:507
msgid "Linked manufacturer part must reference the same base part"
msgstr ""
-#: company/models.py:556 company/templates/company/company_base.html:81
-#: company/templates/company/supplier_part.html:87 order/models.py:256
+#: company/models.py:550 company/templates/company/company_base.html:81
+#: company/templates/company/supplier_part.html:87 order/models.py:252
#: order/templates/order/order_base.html:112 part/bom.py:237 part/bom.py:265
#: stock/templates/stock/item_base.html:387
#: templates/js/translated/company.js:337
-#: templates/js/translated/company.js:774 templates/js/translated/order.js:1443
+#: templates/js/translated/company.js:774 templates/js/translated/order.js:1549
#: templates/js/translated/part.js:216 templates/js/translated/part.js:924
#: templates/js/translated/table_filters.js:415
msgid "Supplier"
msgstr "Tedarikçi"
-#: company/models.py:557 templates/js/translated/part.js:217
+#: company/models.py:551 templates/js/translated/part.js:217
msgid "Select supplier"
msgstr "Tedarikçi seçin"
-#: company/models.py:562 company/templates/company/supplier_part.html:97
-#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1670
+#: company/models.py:556 company/templates/company/supplier_part.html:97
+#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1776
#: templates/js/translated/part.js:227 templates/js/translated/part.js:942
msgid "SKU"
msgstr ""
-#: company/models.py:563 templates/js/translated/part.js:228
+#: company/models.py:557 templates/js/translated/part.js:228
msgid "Supplier stock keeping unit"
msgstr ""
-#: company/models.py:570
+#: company/models.py:564
msgid "Select manufacturer part"
msgstr ""
-#: company/models.py:576
+#: company/models.py:570
msgid "URL for external supplier part link"
msgstr ""
-#: company/models.py:582
+#: company/models.py:576
msgid "Supplier part description"
msgstr ""
-#: company/models.py:587 company/templates/company/supplier_part.html:125
-#: part/models.py:2800 part/templates/part/upload_bom.html:59
+#: company/models.py:581 company/templates/company/supplier_part.html:125
+#: part/models.py:2788 part/templates/part/upload_bom.html:59
#: report/templates/report/inventree_po_report.html:92
-#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:406
+#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:398
msgid "Note"
msgstr "Not"
-#: company/models.py:591 part/models.py:1870
+#: company/models.py:585 part/models.py:1858
msgid "base cost"
msgstr "temel maliyet"
-#: company/models.py:591 part/models.py:1870
+#: company/models.py:585 part/models.py:1858
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:593 company/templates/company/supplier_part.html:118
-#: stock/models.py:640 stock/templates/stock/item_base.html:328
+#: company/models.py:587 company/templates/company/supplier_part.html:118
+#: stock/models.py:631 stock/templates/stock/item_base.html:328
#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1918
msgid "Packaging"
msgstr "Paketleme"
-#: company/models.py:593
+#: company/models.py:587
msgid "Part packaging"
msgstr ""
-#: company/models.py:595 part/models.py:1872
+#: company/models.py:589 part/models.py:1860
msgid "multiple"
msgstr "çoklu"
-#: company/models.py:595
+#: company/models.py:589
msgid "Order multiple"
msgstr ""
-#: company/models.py:719
+#: company/models.py:713
msgid "last updated"
msgstr ""
-#: company/serializers.py:71
+#: company/serializers.py:68
msgid "Default currency used for this supplier"
msgstr ""
-#: company/serializers.py:72
+#: company/serializers.py:69
msgid "Currency Code"
msgstr "Para Birimi Kodu"
@@ -2809,7 +2809,7 @@ msgid "Company"
msgstr ""
#: company/templates/company/company_base.html:22
-#: templates/js/translated/order.js:416
+#: templates/js/translated/order.js:522
msgid "Create Purchase Order"
msgstr "Satın Alma Emri Oluştur"
@@ -2845,11 +2845,11 @@ msgstr ""
msgid "Download image from URL"
msgstr ""
-#: company/templates/company/company_base.html:86 order/models.py:604
-#: order/templates/order/sales_order_base.html:115 stock/models.py:659
-#: stock/models.py:660 stock/serializers.py:722
+#: company/templates/company/company_base.html:86 order/models.py:600
+#: order/templates/order/sales_order_base.html:116 stock/models.py:650
+#: stock/models.py:651 stock/serializers.py:714
#: stock/templates/stock/item_base.html:280
-#: templates/js/translated/company.js:329 templates/js/translated/order.js:2130
+#: templates/js/translated/company.js:329 templates/js/translated/order.js:2236
#: templates/js/translated/stock.js:2436
#: templates/js/translated/table_filters.js:419
msgid "Customer"
@@ -2935,7 +2935,7 @@ msgstr "Tedarikçi Stoku"
#: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197
#: templates/InvenTree/settings/sidebar.html:47
#: templates/js/translated/search.js:190 templates/navbar.html:50
-#: users/models.py:45
+#: users/models.py:43
msgid "Purchase Orders"
msgstr "Satın Alma Emirleri"
@@ -2958,7 +2958,7 @@ msgstr "Yeni Satın Alma Emri"
#: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217
#: templates/InvenTree/settings/sidebar.html:49
#: templates/js/translated/search.js:214 templates/navbar.html:61
-#: users/models.py:46
+#: users/models.py:44
msgid "Sales Orders"
msgstr "Satış Emirleri"
@@ -2997,7 +2997,7 @@ msgstr ""
msgid "Supplier List"
msgstr ""
-#: company/templates/company/manufacturer_part.html:15 company/views.py:52
+#: company/templates/company/manufacturer_part.html:15 company/views.py:47
#: part/templates/part/prices.html:170 templates/InvenTree/search.html:178
#: templates/navbar.html:49
msgid "Manufacturers"
@@ -3030,7 +3030,7 @@ msgid "No manufacturer information available"
msgstr ""
#: company/templates/company/manufacturer_part.html:119
-#: company/templates/company/supplier_part.html:15 company/views.py:46
+#: company/templates/company/supplier_part.html:15 company/views.py:41
#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:166
#: templates/InvenTree/search.html:188 templates/navbar.html:48
msgid "Suppliers"
@@ -3046,7 +3046,7 @@ msgstr "Tedarikçi parçalarını sil"
#: company/templates/company/manufacturer_part.html:303
#: part/templates/part/detail.html:363 part/templates/part/detail.html:392
#: templates/js/translated/bom.js:699 templates/js/translated/company.js:426
-#: templates/js/translated/helpers.js:32 users/models.py:222
+#: templates/js/translated/helpers.js:32 users/models.py:220
msgid "Delete"
msgstr ""
@@ -3098,9 +3098,9 @@ msgid "Assigned Stock Items"
msgstr ""
#: company/templates/company/supplier_part.html:7
-#: company/templates/company/supplier_part.html:24 stock/models.py:624
+#: company/templates/company/supplier_part.html:24 stock/models.py:615
#: stock/templates/stock/item_base.html:396
-#: templates/js/translated/company.js:790 templates/js/translated/order.js:763
+#: templates/js/translated/company.js:790 templates/js/translated/order.js:869
#: templates/js/translated/stock.js:1875
msgid "Supplier Part"
msgstr "Tedarikçi Parçası"
@@ -3217,536 +3217,532 @@ msgstr "Fiyatlandırma"
#: stock/templates/stock/location.html:173
#: stock/templates/stock/location_sidebar.html:7
#: templates/InvenTree/search.html:152 templates/js/translated/search.js:138
-#: templates/js/translated/stock.js:2312 users/models.py:43
+#: templates/js/translated/stock.js:2312 users/models.py:41
msgid "Stock Items"
msgstr "Stok Kalemleri"
-#: company/views.py:47
+#: company/views.py:42
msgid "New Supplier"
msgstr "Yeni Tedarikçi"
-#: company/views.py:53
+#: company/views.py:48
msgid "New Manufacturer"
msgstr "Yeni Üretici"
-#: company/views.py:58 templates/InvenTree/search.html:208
+#: company/views.py:53 templates/InvenTree/search.html:208
#: templates/navbar.html:60
msgid "Customers"
msgstr "Müşteriler"
-#: company/views.py:59
+#: company/views.py:54
msgid "New Customer"
msgstr "Yeni Müşteri"
-#: company/views.py:66 templates/js/translated/search.js:167
+#: company/views.py:61 templates/js/translated/search.js:167
msgid "Companies"
msgstr "Şirketler"
-#: company/views.py:67
+#: company/views.py:62
msgid "New Company"
msgstr "Yeni Şirket"
-#: company/views.py:126 part/views.py:590
+#: company/views.py:121 part/views.py:579
msgid "Download Image"
msgstr "Resmi İndirin"
-#: company/views.py:155 part/views.py:622
+#: company/views.py:150 part/views.py:611
msgid "Image size exceeds maximum allowable size for download"
msgstr ""
-#: company/views.py:162 part/views.py:629
+#: company/views.py:157 part/views.py:618
#, python-brace-format
msgid "Invalid response: {code}"
msgstr "Geçersiz yanıt: {code}"
-#: company/views.py:171 part/views.py:638
+#: company/views.py:166 part/views.py:627
msgid "Supplied URL is not a valid image file"
msgstr "Sağlanan URL geçerli bir resim dosyası değil"
-#: label/api.py:94 report/api.py:201
-msgid "No valid objects provided to template"
-msgstr "Şablon için geçerli bir nesne sağlanmadı"
-
-#: label/models.py:110
+#: label/models.py:105
msgid "Label name"
msgstr "Etiket adı"
-#: label/models.py:117
+#: label/models.py:112
msgid "Label description"
msgstr "Etiket tanımı"
-#: label/models.py:124
+#: label/models.py:119
msgid "Label"
msgstr "Etiket"
-#: label/models.py:125
+#: label/models.py:120
msgid "Label template file"
msgstr "Etiket şablon listesi"
-#: label/models.py:131 report/models.py:291
+#: label/models.py:126 report/models.py:286
msgid "Enabled"
msgstr "Etkin"
-#: label/models.py:132
+#: label/models.py:127
msgid "Label template is enabled"
msgstr "Etiket sablonu etkinleştirildi"
-#: label/models.py:137
+#: label/models.py:132
msgid "Width [mm]"
msgstr "Genişlik [mm]"
-#: label/models.py:138
+#: label/models.py:133
msgid "Label width, specified in mm"
msgstr "Etiket genişliği mm olarak belirtilmeli"
-#: label/models.py:144
+#: label/models.py:139
msgid "Height [mm]"
msgstr "Yükseklik [mm]"
-#: label/models.py:145
+#: label/models.py:140
msgid "Label height, specified in mm"
msgstr "Etiket yüksekliği mm olarak belirtilmeli"
-#: label/models.py:151 report/models.py:284
+#: label/models.py:146 report/models.py:279
msgid "Filename Pattern"
msgstr "Dosya Adı Deseni"
-#: label/models.py:152
+#: label/models.py:147
msgid "Pattern for generating label filenames"
msgstr "Etiket dosya adları oluşturma için desen"
-#: label/models.py:255
+#: label/models.py:250
msgid "Query filters (comma-separated list of key=value pairs),"
msgstr ""
-#: label/models.py:256 label/models.py:316 label/models.py:363
-#: report/models.py:315 report/models.py:452 report/models.py:491
+#: label/models.py:251 label/models.py:295 label/models.py:327
+#: report/models.py:310 report/models.py:447 report/models.py:486
msgid "Filters"
msgstr "Filtreler"
-#: label/models.py:315
+#: label/models.py:294
msgid "Query filters (comma-separated list of key=value pairs"
msgstr ""
-#: label/models.py:362
+#: label/models.py:326
msgid "Part query filters (comma-separated value of key=value pairs)"
msgstr ""
-#: order/models.py:134
+#: order/models.py:130
msgid "Order description"
msgstr "Sipariş açıklaması"
-#: order/models.py:136
+#: order/models.py:132
msgid "Link to external page"
msgstr "Harici sayfaya bağlantı"
-#: order/models.py:144
+#: order/models.py:140
msgid "Created By"
msgstr "Oluşturan"
-#: order/models.py:151
+#: order/models.py:147
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:156
+#: order/models.py:152
msgid "Order notes"
msgstr "Sipariş notları"
-#: order/models.py:242 order/models.py:594
+#: order/models.py:238 order/models.py:590
msgid "Order reference"
msgstr "Sipariş referansı"
-#: order/models.py:247 order/models.py:609
+#: order/models.py:243 order/models.py:605
msgid "Purchase order status"
msgstr ""
-#: order/models.py:257
+#: order/models.py:253
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:260 order/templates/order/order_base.html:124
-#: templates/js/translated/order.js:1452
+#: order/models.py:256 order/templates/order/order_base.html:124
+#: templates/js/translated/order.js:1558
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:260
+#: order/models.py:256
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:267
+#: order/models.py:263
msgid "received by"
msgstr ""
-#: order/models.py:272
+#: order/models.py:268
msgid "Issue Date"
msgstr ""
-#: order/models.py:273
+#: order/models.py:269
msgid "Date order was issued"
msgstr ""
-#: order/models.py:278
+#: order/models.py:274
msgid "Target Delivery Date"
msgstr ""
-#: order/models.py:279
+#: order/models.py:275
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:285
+#: order/models.py:281
msgid "Date order was completed"
msgstr ""
-#: order/models.py:314
+#: order/models.py:310
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:460
+#: order/models.py:456
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:605
+#: order/models.py:601
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:611
+#: order/models.py:607
msgid "Customer Reference "
msgstr ""
-#: order/models.py:611
+#: order/models.py:607
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:616
+#: order/models.py:612
msgid "Target date for order completion. Order will be overdue after this date."
msgstr ""
-#: order/models.py:619 order/models.py:1174
-#: templates/js/translated/order.js:2177 templates/js/translated/order.js:2328
+#: order/models.py:615 order/models.py:1170
+#: templates/js/translated/order.js:2283 templates/js/translated/order.js:2434
msgid "Shipment Date"
msgstr ""
-#: order/models.py:626
+#: order/models.py:622
msgid "shipped by"
msgstr ""
-#: order/models.py:692
+#: order/models.py:688
msgid "Order cannot be completed as no parts have been assigned"
msgstr ""
-#: order/models.py:696
+#: order/models.py:692
msgid "Only a pending order can be marked as complete"
msgstr ""
-#: order/models.py:699
+#: order/models.py:695
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:702
+#: order/models.py:698
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:882
+#: order/models.py:878
msgid "Item quantity"
msgstr ""
-#: order/models.py:888
+#: order/models.py:884
msgid "Line item reference"
msgstr ""
-#: order/models.py:890
+#: order/models.py:886
msgid "Line item notes"
msgstr ""
-#: order/models.py:895
+#: order/models.py:891
msgid "Target shipping date for this line item"
msgstr ""
-#: order/models.py:913
+#: order/models.py:909
msgid "Context"
msgstr ""
-#: order/models.py:914
+#: order/models.py:910
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:922
+#: order/models.py:918
msgid "Unit price"
msgstr ""
-#: order/models.py:955
+#: order/models.py:951
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:962
+#: order/models.py:958
msgid "deleted"
msgstr ""
-#: order/models.py:968 order/models.py:1050 order/models.py:1072
-#: order/models.py:1168 order/models.py:1268
-#: templates/js/translated/order.js:2719
+#: order/models.py:964 order/models.py:1046 order/models.py:1068
+#: order/models.py:1164 order/models.py:1273
+#: templates/js/translated/order.js:2874
msgid "Order"
msgstr ""
-#: order/models.py:969 order/models.py:1050
+#: order/models.py:965 order/models.py:1046
#: order/templates/order/order_base.html:9
#: order/templates/order/order_base.html:18
#: report/templates/report/inventree_po_report.html:76
#: stock/templates/stock/item_base.html:342
-#: templates/js/translated/order.js:764 templates/js/translated/order.js:1421
+#: templates/js/translated/order.js:870 templates/js/translated/order.js:1527
#: templates/js/translated/part.js:899 templates/js/translated/stock.js:1852
#: templates/js/translated/stock.js:2417
msgid "Purchase Order"
msgstr ""
-#: order/models.py:988
+#: order/models.py:984
msgid "Supplier part"
msgstr ""
-#: order/models.py:995 order/templates/order/order_base.html:169
-#: templates/js/translated/order.js:1197 templates/js/translated/order.js:1785
+#: order/models.py:991 order/templates/order/order_base.html:169
+#: templates/js/translated/order.js:1303 templates/js/translated/order.js:1891
#: templates/js/translated/part.js:993 templates/js/translated/part.js:1020
#: templates/js/translated/table_filters.js:330
msgid "Received"
msgstr ""
-#: order/models.py:996
+#: order/models.py:992
msgid "Number of items received"
msgstr ""
-#: order/models.py:1003 part/templates/part/prices.html:179 stock/models.py:754
-#: stock/serializers.py:167 stock/templates/stock/item_base.html:349
+#: order/models.py:999 part/templates/part/prices.html:179 stock/models.py:745
+#: stock/serializers.py:159 stock/templates/stock/item_base.html:349
#: templates/js/translated/stock.js:1906
msgid "Purchase Price"
msgstr ""
-#: order/models.py:1004
+#: order/models.py:1000
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:1012
+#: order/models.py:1008
msgid "Where does the Purchaser want this item to be stored?"
msgstr ""
-#: order/models.py:1082 part/templates/part/part_pricing.html:112
+#: order/models.py:1078 part/templates/part/part_pricing.html:112
#: part/templates/part/prices.html:119 part/templates/part/prices.html:288
msgid "Sale Price"
msgstr ""
-#: order/models.py:1083
+#: order/models.py:1079
msgid "Unit sale price"
msgstr ""
-#: order/models.py:1088
+#: order/models.py:1084
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:1175
+#: order/models.py:1171
msgid "Date of shipment"
msgstr ""
-#: order/models.py:1182
+#: order/models.py:1178
msgid "Checked By"
msgstr ""
-#: order/models.py:1183
+#: order/models.py:1179
msgid "User who checked this shipment"
msgstr ""
-#: order/models.py:1191
+#: order/models.py:1187
msgid "Shipment number"
msgstr ""
-#: order/models.py:1198
+#: order/models.py:1194
msgid "Shipment notes"
msgstr ""
-#: order/models.py:1205
+#: order/models.py:1201
msgid "Tracking Number"
msgstr ""
-#: order/models.py:1206
+#: order/models.py:1202
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:1216
+#: order/models.py:1213
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:1219
+#: order/models.py:1216
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:1306 order/models.py:1308
+#: order/models.py:1311 order/models.py:1313
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:1312
+#: order/models.py:1317
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:1314
+#: order/models.py:1319
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:1317
+#: order/models.py:1322
msgid "Allocation quantity cannot exceed stock quantity"
msgstr "Tahsis miktarı stok miktarını aşamaz"
-#: order/models.py:1321
+#: order/models.py:1326
msgid "StockItem is over-allocated"
msgstr "Stok kalemi fazladan tahsis edilmiş"
-#: order/models.py:1327 order/serializers.py:1002
+#: order/models.py:1332 order/serializers.py:1005
msgid "Quantity must be 1 for serialized stock item"
msgstr "Seri numaralı stok kalemi için miktar bir olmalı"
-#: order/models.py:1330
+#: order/models.py:1335
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:1331
+#: order/models.py:1336
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:1339
+#: order/models.py:1344
msgid "Line"
msgstr ""
-#: order/models.py:1347 order/serializers.py:1112 order/serializers.py:1240
+#: order/models.py:1352 order/serializers.py:1115 order/serializers.py:1243
#: templates/js/translated/model_renderers.js:301
msgid "Shipment"
msgstr ""
-#: order/models.py:1348
+#: order/models.py:1353
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:1360 templates/InvenTree/notifications/notifications.html:70
+#: order/models.py:1365 templates/InvenTree/notifications/notifications.html:70
msgid "Item"
msgstr ""
-#: order/models.py:1361
+#: order/models.py:1366
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:1364
+#: order/models.py:1369
msgid "Enter stock allocation quantity"
msgstr "Stok tahsis miktarını girin"
-#: order/serializers.py:74
+#: order/serializers.py:69
msgid "Price currency"
msgstr ""
-#: order/serializers.py:203
+#: order/serializers.py:198
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:301
+#: order/serializers.py:296
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:325
+#: order/serializers.py:320
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:339
+#: order/serializers.py:334
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:344
+#: order/serializers.py:339
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:350
+#: order/serializers.py:345
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:351
+#: order/serializers.py:346
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:411 order/serializers.py:1077
+#: order/serializers.py:406 order/serializers.py:1080
msgid "Line Item"
msgstr ""
-#: order/serializers.py:417
+#: order/serializers.py:412
msgid "Line item does not match purchase order"
msgstr ""
-#: order/serializers.py:427 order/serializers.py:532
+#: order/serializers.py:422 order/serializers.py:527
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:446 templates/js/translated/order.js:1055
+#: order/serializers.py:441 templates/js/translated/order.js:1161
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:454 templates/js/translated/order.js:1066
+#: order/serializers.py:449 templates/js/translated/order.js:1172
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:467
+#: order/serializers.py:462
msgid "Barcode Hash"
msgstr ""
-#: order/serializers.py:468
+#: order/serializers.py:463
msgid "Unique identifier field"
msgstr ""
-#: order/serializers.py:485
+#: order/serializers.py:480
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:504
+#: order/serializers.py:499
msgid "An integer quantity must be provided for trackable parts"
msgstr ""
-#: order/serializers.py:544
+#: order/serializers.py:539
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:561
+#: order/serializers.py:556
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:572
+#: order/serializers.py:567
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:847
+#: order/serializers.py:842
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:917
+#: order/serializers.py:913
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:967 order/serializers.py:1089
+#: order/serializers.py:970 order/serializers.py:1092
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:989
+#: order/serializers.py:992
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1102
+#: order/serializers.py:1105
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1126 order/serializers.py:1251
+#: order/serializers.py:1129 order/serializers.py:1254
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1129 order/serializers.py:1254
+#: order/serializers.py:1132 order/serializers.py:1257
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1181
+#: order/serializers.py:1184
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1191
+#: order/serializers.py:1194
msgid "The following serial numbers are already allocated"
msgstr ""
@@ -3770,7 +3766,7 @@ msgid "Edit order"
msgstr ""
#: order/templates/order/order_base.html:47
-#: order/templates/order/sales_order_base.html:60
+#: order/templates/order/sales_order_base.html:61
msgid "Cancel order"
msgstr "Siparişi iptal et"
@@ -3792,22 +3788,22 @@ msgid "Mark order as complete"
msgstr "Siparişi tamamlandı olarak işaretle"
#: order/templates/order/order_base.html:62
-#: order/templates/order/sales_order_base.html:67
+#: order/templates/order/sales_order_base.html:68
msgid "Complete Order"
msgstr ""
#: order/templates/order/order_base.html:84
-#: order/templates/order/sales_order_base.html:79
+#: order/templates/order/sales_order_base.html:80
msgid "Order Reference"
msgstr ""
#: order/templates/order/order_base.html:89
-#: order/templates/order/sales_order_base.html:84
+#: order/templates/order/sales_order_base.html:85
msgid "Order Description"
msgstr ""
#: order/templates/order/order_base.html:94
-#: order/templates/order/sales_order_base.html:89
+#: order/templates/order/sales_order_base.html:90
msgid "Order Status"
msgstr ""
@@ -3816,13 +3812,13 @@ msgid "No suppplier information available"
msgstr ""
#: order/templates/order/order_base.html:130
-#: order/templates/order/sales_order_base.html:128
+#: order/templates/order/sales_order_base.html:129
msgid "Completed Line Items"
msgstr ""
#: order/templates/order/order_base.html:136
-#: order/templates/order/sales_order_base.html:134
-#: order/templates/order/sales_order_base.html:144
+#: order/templates/order/sales_order_base.html:135
+#: order/templates/order/sales_order_base.html:145
msgid "Incomplete"
msgstr ""
@@ -3832,7 +3828,7 @@ msgid "Issued"
msgstr ""
#: order/templates/order/order_base.html:183
-#: order/templates/order/sales_order_base.html:189
+#: order/templates/order/sales_order_base.html:190
msgid "Total cost"
msgstr ""
@@ -3868,8 +3864,8 @@ msgstr "Tedarikçi Parçası Seçin"
#: part/templates/part/import_wizard/match_references.html:49
#: templates/js/translated/bom.js:77 templates/js/translated/build.js:427
#: templates/js/translated/build.js:579 templates/js/translated/build.js:1989
-#: templates/js/translated/order.js:712 templates/js/translated/order.js:1144
-#: templates/js/translated/order.js:2387 templates/js/translated/stock.js:570
+#: templates/js/translated/order.js:818 templates/js/translated/order.js:1250
+#: templates/js/translated/order.js:2493 templates/js/translated/stock.js:570
#: templates/js/translated/stock.js:738
#: templates/patterns/wizard/match_fields.html:70
msgid "Remove row"
@@ -3920,7 +3916,7 @@ msgstr ""
#: order/templates/order/purchase_order_detail.html:53
#: order/templates/order/sales_order_detail.html:45
-#: order/templates/order/sales_order_detail.html:273
+#: order/templates/order/sales_order_detail.html:274
msgid "Add Extra Line"
msgstr ""
@@ -3950,27 +3946,32 @@ msgstr ""
msgid "Print packing list"
msgstr ""
-#: order/templates/order/sales_order_base.html:66
-#: order/templates/order/sales_order_base.html:239
+#: order/templates/order/sales_order_base.html:60
+#: templates/js/translated/order.js:211
+msgid "Complete Shipments"
+msgstr ""
+
+#: order/templates/order/sales_order_base.html:67
+#: order/templates/order/sales_order_base.html:250
msgid "Complete Sales Order"
msgstr ""
-#: order/templates/order/sales_order_base.html:102
+#: order/templates/order/sales_order_base.html:103
msgid "This Sales Order has not been fully allocated"
msgstr ""
-#: order/templates/order/sales_order_base.html:122
-#: templates/js/translated/order.js:2143
+#: order/templates/order/sales_order_base.html:123
+#: templates/js/translated/order.js:2249
msgid "Customer Reference"
msgstr ""
-#: order/templates/order/sales_order_base.html:140
+#: order/templates/order/sales_order_base.html:141
#: order/templates/order/sales_order_detail.html:100
#: order/templates/order/so_sidebar.html:11
msgid "Completed Shipments"
msgstr ""
-#: order/templates/order/sales_order_base.html:221
+#: order/templates/order/sales_order_base.html:222
msgid "Edit Sales Order"
msgstr ""
@@ -3992,73 +3993,73 @@ msgstr "İşlemler"
msgid "New Shipment"
msgstr ""
-#: order/views.py:121
+#: order/views.py:117
msgid "Match Supplier Parts"
msgstr ""
-#: order/views.py:394
+#: order/views.py:390
msgid "Sales order not found"
msgstr ""
-#: order/views.py:400
+#: order/views.py:396
msgid "Price not found"
msgstr ""
-#: order/views.py:403
+#: order/views.py:399
#, python-brace-format
msgid "Updated {part} unit-price to {price}"
msgstr ""
-#: order/views.py:408
+#: order/views.py:404
#, python-brace-format
msgid "Updated {part} unit-price to {price} and quantity to {qty}"
msgstr ""
-#: part/api.py:516
+#: part/api.py:504
msgid "Incoming Purchase Order"
msgstr ""
-#: part/api.py:536
+#: part/api.py:524
msgid "Outgoing Sales Order"
msgstr ""
-#: part/api.py:554
+#: part/api.py:542
msgid "Stock produced by Build Order"
msgstr ""
-#: part/api.py:586
+#: part/api.py:574
msgid "Stock required for Build Order"
msgstr ""
-#: part/api.py:677
+#: part/api.py:665
msgid "Valid"
msgstr ""
-#: part/api.py:678
+#: part/api.py:666
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/api.py:683
+#: part/api.py:671
msgid "This option must be selected"
msgstr ""
-#: part/api.py:1055
+#: part/api.py:1043
msgid "Must be greater than zero"
msgstr ""
-#: part/api.py:1059
+#: part/api.py:1047
msgid "Must be a valid quantity"
msgstr ""
-#: part/api.py:1074
+#: part/api.py:1062
msgid "Specify location for initial part stock"
msgstr ""
-#: part/api.py:1105 part/api.py:1109 part/api.py:1124 part/api.py:1128
+#: part/api.py:1093 part/api.py:1097 part/api.py:1112 part/api.py:1116
msgid "This field is required"
msgstr ""
-#: part/bom.py:125 part/models.py:111 part/models.py:886
+#: part/bom.py:125 part/models.py:99 part/models.py:874
#: part/templates/part/category.html:108 part/templates/part/part_base.html:330
msgid "Default Location"
msgstr "Varsayılan Konum"
@@ -4078,115 +4079,115 @@ msgstr ""
msgid "On Order"
msgstr ""
-#: part/forms.py:81
+#: part/forms.py:79
msgid "Select part category"
msgstr ""
-#: part/forms.py:100
+#: part/forms.py:98
msgid "Add parameter template to same level categories"
msgstr "Parametre şablonunu aynı seviyedeki kategorilere ekle"
-#: part/forms.py:104
+#: part/forms.py:102
msgid "Add parameter template to all categories"
msgstr "Parametre şablonunu tüm kategorilere ekle"
-#: part/forms.py:124
+#: part/forms.py:122
msgid "Input quantity for price calculation"
msgstr ""
-#: part/models.py:112
+#: part/models.py:100
msgid "Default location for parts in this category"
msgstr "Bu kategori içindeki parçalar için varsayılan konum"
-#: part/models.py:115
+#: part/models.py:103
msgid "Default keywords"
msgstr ""
-#: part/models.py:115
+#: part/models.py:103
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:125 part/models.py:2637 part/templates/part/category.html:15
+#: part/models.py:113 part/models.py:2625 part/templates/part/category.html:15
#: part/templates/part/part_app_base.html:10
msgid "Part Category"
msgstr ""
-#: part/models.py:126 part/templates/part/category.html:128
+#: part/models.py:114 part/templates/part/category.html:128
#: templates/InvenTree/search.html:95 templates/js/translated/search.js:113
-#: users/models.py:40
+#: users/models.py:38
msgid "Part Categories"
msgstr "Parça Kategorileri"
-#: part/models.py:367 part/templates/part/cat_link.html:3
+#: part/models.py:355 part/templates/part/cat_link.html:3
#: part/templates/part/category.html:17 part/templates/part/category.html:133
#: part/templates/part/category.html:153
#: part/templates/part/category_sidebar.html:9
#: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82
#: templates/InvenTree/settings/sidebar.html:39
#: templates/js/translated/part.js:1768 templates/js/translated/search.js:99
-#: templates/navbar.html:24 users/models.py:41
+#: templates/navbar.html:24 users/models.py:39
msgid "Parts"
msgstr "Parçalar"
-#: part/models.py:459
+#: part/models.py:447
msgid "Invalid choice for parent part"
msgstr ""
-#: part/models.py:534 part/models.py:546
+#: part/models.py:522 part/models.py:534
#, python-brace-format
msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)"
msgstr ""
-#: part/models.py:676
+#: part/models.py:664
msgid "Next available serial numbers are"
msgstr "Sonraki kullanılabilir seri numaraları"
-#: part/models.py:680
+#: part/models.py:668
msgid "Next available serial number is"
msgstr "Sonraki müsait seri numarası"
-#: part/models.py:685
+#: part/models.py:673
msgid "Most recent serial number is"
msgstr "En son seri numarası"
-#: part/models.py:781
+#: part/models.py:769
msgid "Duplicate IPN not allowed in part settings"
msgstr "Yinelenen DPN'ye parça ayarlarında izin verilmiyor"
-#: part/models.py:810 part/models.py:2690
+#: part/models.py:798 part/models.py:2678
msgid "Part name"
msgstr "Parça adı"
-#: part/models.py:817
+#: part/models.py:805
msgid "Is Template"
msgstr "Şablon Mu"
-#: part/models.py:818
+#: part/models.py:806
msgid "Is this part a template part?"
msgstr "Bu parça bir şablon parçası mı?"
-#: part/models.py:828
+#: part/models.py:816
msgid "Is this part a variant of another part?"
msgstr "Bu parça başka bir parçanın çeşidi mi?"
-#: part/models.py:829
+#: part/models.py:817
msgid "Variant Of"
msgstr "Çeşidi"
-#: part/models.py:835
+#: part/models.py:823
msgid "Part description"
msgstr "Parça açıklaması"
-#: part/models.py:840 part/templates/part/category.html:86
+#: part/models.py:828 part/templates/part/category.html:86
#: part/templates/part/part_base.html:294
msgid "Keywords"
msgstr "Anahtar kelimeler"
-#: part/models.py:841
+#: part/models.py:829
msgid "Part keywords to improve visibility in search results"
msgstr ""
-#: part/models.py:848 part/models.py:2387 part/models.py:2636
+#: part/models.py:836 part/models.py:2375 part/models.py:2624
#: part/templates/part/part_base.html:257
#: part/templates/part/set_category.html:15
#: templates/InvenTree/notifications/notifications.html:65
@@ -4195,432 +4196,432 @@ msgstr ""
msgid "Category"
msgstr ""
-#: part/models.py:849
+#: part/models.py:837
msgid "Part category"
msgstr ""
-#: part/models.py:854 part/templates/part/part_base.html:266
+#: part/models.py:842 part/templates/part/part_base.html:266
#: templates/js/translated/part.js:666 templates/js/translated/part.js:1322
#: templates/js/translated/stock.js:1669
msgid "IPN"
msgstr "DPN"
-#: part/models.py:855
+#: part/models.py:843
msgid "Internal Part Number"
msgstr ""
-#: part/models.py:861
+#: part/models.py:849
msgid "Part revision or version number"
msgstr "Parça revizyon veya versiyon numarası"
-#: part/models.py:862 part/templates/part/part_base.html:273
-#: report/models.py:193 templates/js/translated/part.js:670
+#: part/models.py:850 part/templates/part/part_base.html:273
+#: report/models.py:188 templates/js/translated/part.js:670
msgid "Revision"
msgstr "Revizyon"
-#: part/models.py:884
+#: part/models.py:872
msgid "Where is this item normally stored?"
msgstr ""
-#: part/models.py:931 part/templates/part/part_base.html:339
+#: part/models.py:919 part/templates/part/part_base.html:339
msgid "Default Supplier"
msgstr "Varsayılan Tedarikçi"
-#: part/models.py:932
+#: part/models.py:920
msgid "Default supplier part"
msgstr "Varsayılan tedarikçi parçası"
-#: part/models.py:939
+#: part/models.py:927
msgid "Default Expiry"
msgstr ""
-#: part/models.py:940
+#: part/models.py:928
msgid "Expiry time (in days) for stock items of this part"
msgstr ""
-#: part/models.py:945 part/templates/part/part_base.html:200
+#: part/models.py:933 part/templates/part/part_base.html:200
msgid "Minimum Stock"
msgstr "Minimum Stok"
-#: part/models.py:946
+#: part/models.py:934
msgid "Minimum allowed stock level"
msgstr ""
-#: part/models.py:953
+#: part/models.py:941
msgid "Stock keeping units for this part"
msgstr ""
-#: part/models.py:959
+#: part/models.py:947
msgid "Can this part be built from other parts?"
msgstr "Bu parça diğer parçalardan yapılabilir mi?"
-#: part/models.py:965
+#: part/models.py:953
msgid "Can this part be used to build other parts?"
msgstr "Bu parça diğer parçaların yapımında kullanılabilir mi?"
-#: part/models.py:971
+#: part/models.py:959
msgid "Does this part have tracking for unique items?"
msgstr ""
-#: part/models.py:976
+#: part/models.py:964
msgid "Can this part be purchased from external suppliers?"
msgstr "Bu parça dış tedarikçilerden satın alınabilir mi?"
-#: part/models.py:981
+#: part/models.py:969
msgid "Can this part be sold to customers?"
msgstr "Bu parça müşterilere satılabilir mi?"
-#: part/models.py:986
+#: part/models.py:974
msgid "Is this part active?"
msgstr "Bu parça aktif mi?"
-#: part/models.py:991
+#: part/models.py:979
msgid "Is this a virtual part, such as a software product or license?"
msgstr ""
-#: part/models.py:996
+#: part/models.py:984
msgid "Part notes - supports Markdown formatting"
msgstr ""
-#: part/models.py:999
+#: part/models.py:987
msgid "BOM checksum"
msgstr ""
-#: part/models.py:999
+#: part/models.py:987
msgid "Stored BOM checksum"
msgstr ""
-#: part/models.py:1002
+#: part/models.py:990
msgid "BOM checked by"
msgstr ""
-#: part/models.py:1004
+#: part/models.py:992
msgid "BOM checked date"
msgstr ""
-#: part/models.py:1008
+#: part/models.py:996
msgid "Creation User"
msgstr "Oluşturan Kullanıcı"
-#: part/models.py:1872
+#: part/models.py:1860
msgid "Sell multiple"
msgstr ""
-#: part/models.py:2437
+#: part/models.py:2425
msgid "Test templates can only be created for trackable parts"
msgstr "Test şablonları sadece takip edilebilir paçalar için oluşturulabilir"
-#: part/models.py:2454
+#: part/models.py:2442
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2474 templates/js/translated/part.js:1819
+#: part/models.py:2462 templates/js/translated/part.js:1819
#: templates/js/translated/stock.js:1284
msgid "Test Name"
msgstr "Test Adı"
-#: part/models.py:2475
+#: part/models.py:2463
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:2480
+#: part/models.py:2468
msgid "Test Description"
msgstr "Test Açıklaması"
-#: part/models.py:2481
+#: part/models.py:2469
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2486 templates/js/translated/part.js:1828
+#: part/models.py:2474 templates/js/translated/part.js:1828
#: templates/js/translated/table_filters.js:294
msgid "Required"
msgstr "Gerekli"
-#: part/models.py:2487
+#: part/models.py:2475
msgid "Is this test required to pass?"
msgstr "Testi geçmesi için bu gerekli mi?"
-#: part/models.py:2492 templates/js/translated/part.js:1836
+#: part/models.py:2480 templates/js/translated/part.js:1836
msgid "Requires Value"
msgstr ""
-#: part/models.py:2493
+#: part/models.py:2481
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2498 templates/js/translated/part.js:1843
+#: part/models.py:2486 templates/js/translated/part.js:1843
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:2499
+#: part/models.py:2487
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:2510
+#: part/models.py:2498
#, python-brace-format
msgid "Illegal character in template name ({c})"
msgstr ""
-#: part/models.py:2546
+#: part/models.py:2534
msgid "Parameter template name must be unique"
msgstr "Parametre şablon adı benzersiz olmalıdır"
-#: part/models.py:2554
+#: part/models.py:2542
msgid "Parameter Name"
msgstr ""
-#: part/models.py:2561
+#: part/models.py:2549
msgid "Parameter Units"
msgstr ""
-#: part/models.py:2591
+#: part/models.py:2579
msgid "Parent Part"
msgstr ""
-#: part/models.py:2593 part/models.py:2642 part/models.py:2643
+#: part/models.py:2581 part/models.py:2630 part/models.py:2631
#: templates/InvenTree/settings/settings.html:226
msgid "Parameter Template"
msgstr "Parametre Şablonu"
-#: part/models.py:2595
+#: part/models.py:2583
msgid "Data"
msgstr ""
-#: part/models.py:2595
+#: part/models.py:2583
msgid "Parameter Value"
msgstr ""
-#: part/models.py:2647 templates/InvenTree/settings/settings.html:235
+#: part/models.py:2635 templates/InvenTree/settings/settings.html:235
msgid "Default Value"
msgstr ""
-#: part/models.py:2648
+#: part/models.py:2636
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:2682
+#: part/models.py:2670
msgid "Part ID or part name"
msgstr ""
-#: part/models.py:2685 templates/js/translated/model_renderers.js:200
+#: part/models.py:2673 templates/js/translated/model_renderers.js:200
msgid "Part ID"
msgstr ""
-#: part/models.py:2686
+#: part/models.py:2674
msgid "Unique part ID value"
msgstr ""
-#: part/models.py:2689
+#: part/models.py:2677
msgid "Part Name"
msgstr ""
-#: part/models.py:2693
+#: part/models.py:2681
msgid "Part IPN"
msgstr ""
-#: part/models.py:2694
+#: part/models.py:2682
msgid "Part IPN value"
msgstr ""
-#: part/models.py:2697
+#: part/models.py:2685
msgid "Level"
msgstr ""
-#: part/models.py:2698
+#: part/models.py:2686
msgid "BOM level"
msgstr ""
-#: part/models.py:2773
+#: part/models.py:2761
msgid "Select parent part"
msgstr ""
-#: part/models.py:2781
+#: part/models.py:2769
msgid "Sub part"
msgstr ""
-#: part/models.py:2782
+#: part/models.py:2770
msgid "Select part to be used in BOM"
msgstr ""
-#: part/models.py:2788
+#: part/models.py:2776
msgid "BOM quantity for this BOM item"
msgstr ""
-#: part/models.py:2790 part/templates/part/upload_bom.html:58
+#: part/models.py:2778 part/templates/part/upload_bom.html:58
#: templates/js/translated/bom.js:898 templates/js/translated/bom.js:992
#: templates/js/translated/table_filters.js:92
msgid "Optional"
msgstr ""
-#: part/models.py:2790
+#: part/models.py:2778
msgid "This BOM item is optional"
msgstr ""
-#: part/models.py:2793 part/templates/part/upload_bom.html:55
+#: part/models.py:2781 part/templates/part/upload_bom.html:55
msgid "Overage"
msgstr ""
-#: part/models.py:2794
+#: part/models.py:2782
msgid "Estimated build wastage quantity (absolute or percentage)"
msgstr ""
-#: part/models.py:2797
+#: part/models.py:2785
msgid "BOM item reference"
msgstr ""
-#: part/models.py:2800
+#: part/models.py:2788
msgid "BOM item notes"
msgstr ""
-#: part/models.py:2802
+#: part/models.py:2790
msgid "Checksum"
msgstr ""
-#: part/models.py:2802
+#: part/models.py:2790
msgid "BOM line checksum"
msgstr ""
-#: part/models.py:2806 part/templates/part/upload_bom.html:57
+#: part/models.py:2794 part/templates/part/upload_bom.html:57
#: templates/js/translated/bom.js:1009
#: templates/js/translated/table_filters.js:68
#: templates/js/translated/table_filters.js:88
msgid "Inherited"
msgstr ""
-#: part/models.py:2807
+#: part/models.py:2795
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr "Bu malzeme listesi, çeşit parçalar listesini kalıtsalıdır"
-#: part/models.py:2812 part/templates/part/upload_bom.html:56
+#: part/models.py:2800 part/templates/part/upload_bom.html:56
#: templates/js/translated/bom.js:1001
msgid "Allow Variants"
msgstr "Çeşide İzin Ver"
-#: part/models.py:2813
+#: part/models.py:2801
msgid "Stock items for variant parts can be used for this BOM item"
msgstr "Çeşit parçaların stok kalemleri bu malzeme listesinde kullanılabilir"
-#: part/models.py:2898 stock/models.py:495
+#: part/models.py:2886 stock/models.py:486
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:2907 part/models.py:2909
+#: part/models.py:2895 part/models.py:2897
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:3021
+#: part/models.py:3009
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:3043
+#: part/models.py:3031
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:3055
+#: part/models.py:3043
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:3063
+#: part/models.py:3051
msgid "Substitute part"
msgstr ""
-#: part/models.py:3074
+#: part/models.py:3062
msgid "Part 1"
msgstr ""
-#: part/models.py:3078
+#: part/models.py:3066
msgid "Part 2"
msgstr ""
-#: part/models.py:3078
+#: part/models.py:3066
msgid "Select Related Part"
msgstr ""
-#: part/models.py:3110
+#: part/models.py:3098
msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique"
msgstr ""
-#: part/serializers.py:157 part/serializers.py:189 stock/serializers.py:177
+#: part/serializers.py:152 part/serializers.py:184 stock/serializers.py:169
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:923
+#: part/serializers.py:918
msgid "Select part to copy BOM from"
msgstr ""
-#: part/serializers.py:934
+#: part/serializers.py:929
msgid "Remove Existing Data"
msgstr ""
-#: part/serializers.py:935
+#: part/serializers.py:930
msgid "Remove existing BOM items before copying"
msgstr ""
-#: part/serializers.py:940
+#: part/serializers.py:935
msgid "Include Inherited"
msgstr ""
-#: part/serializers.py:941
+#: part/serializers.py:936
msgid "Include BOM items which are inherited from templated parts"
msgstr ""
-#: part/serializers.py:946
+#: part/serializers.py:941
msgid "Skip Invalid Rows"
msgstr ""
-#: part/serializers.py:947
+#: part/serializers.py:942
msgid "Enable this option to skip invalid rows"
msgstr ""
-#: part/serializers.py:952
+#: part/serializers.py:947
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:953
+#: part/serializers.py:948
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
-#: part/serializers.py:997
+#: part/serializers.py:992
msgid "Clear Existing BOM"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:993
msgid "Delete existing BOM items before uploading"
msgstr ""
-#: part/serializers.py:1025
+#: part/serializers.py:1020
msgid "No part column specified"
msgstr ""
-#: part/serializers.py:1068
+#: part/serializers.py:1063
msgid "Multiple matching parts found"
msgstr ""
-#: part/serializers.py:1071
+#: part/serializers.py:1066
msgid "No matching part found"
msgstr ""
-#: part/serializers.py:1074
+#: part/serializers.py:1069
msgid "Part is not designated as a component"
msgstr ""
-#: part/serializers.py:1083
+#: part/serializers.py:1078
msgid "Quantity not provided"
msgstr ""
-#: part/serializers.py:1091
+#: part/serializers.py:1086
msgid "Invalid quantity"
msgstr ""
-#: part/serializers.py:1110
+#: part/serializers.py:1105
msgid "At least one BOM item is required"
msgstr ""
-#: part/tasks.py:15
+#: part/tasks.py:14
msgid "Low stock notification"
msgstr ""
-#: part/tasks.py:16
+#: part/tasks.py:15
#, python-brace-format
msgid "The available stock for {part.name} has fallen below the configured minimum level"
msgstr ""
@@ -5100,7 +5101,7 @@ msgstr ""
msgid "This part is a variant of %(link)s"
msgstr "Bu parça %(link)s parçasının bir çeşididir"
-#: part/templates/part/part_base.html:194 templates/js/translated/order.js:3150
+#: part/templates/part/part_base.html:194 templates/js/translated/order.js:3305
#: templates/js/translated/table_filters.js:193
msgid "In Stock"
msgstr ""
@@ -5391,93 +5392,93 @@ msgstr "Yeni parça çeşidi oluştur"
msgid "Create a new variant of template '%(full_name)s'."
msgstr ""
-#: part/templatetags/inventree_extras.py:191
+#: part/templatetags/inventree_extras.py:186
msgid "Unknown database"
msgstr ""
-#: part/templatetags/inventree_extras.py:228
+#: part/templatetags/inventree_extras.py:223
#, python-brace-format
msgid "{title} v{version}"
msgstr ""
-#: part/views.py:85
+#: part/views.py:74
msgid "Set Part Category"
msgstr ""
-#: part/views.py:135
+#: part/views.py:124
#, python-brace-format
msgid "Set category for {n} parts"
msgstr ""
-#: part/views.py:207
+#: part/views.py:196
msgid "Match References"
msgstr ""
-#: part/views.py:508
+#: part/views.py:497
msgid "None"
msgstr "Hiçbiri"
-#: part/views.py:567
+#: part/views.py:556
msgid "Part QR Code"
msgstr ""
-#: part/views.py:669
+#: part/views.py:658
msgid "Select Part Image"
msgstr ""
-#: part/views.py:695
+#: part/views.py:684
msgid "Updated part image"
msgstr ""
-#: part/views.py:698
+#: part/views.py:687
msgid "Part image not found"
msgstr ""
-#: part/views.py:786
+#: part/views.py:775
msgid "Confirm Part Deletion"
msgstr ""
-#: part/views.py:793
+#: part/views.py:782
msgid "Part was deleted"
msgstr ""
-#: part/views.py:802
+#: part/views.py:791
msgid "Part Pricing"
msgstr ""
-#: part/views.py:951
+#: part/views.py:940
msgid "Create Part Parameter Template"
msgstr "Parça Parametre Şablonu Oluştur"
-#: part/views.py:961
+#: part/views.py:950
msgid "Edit Part Parameter Template"
msgstr "Parça Parametre Şablonu Düzenle"
-#: part/views.py:968
+#: part/views.py:957
msgid "Delete Part Parameter Template"
msgstr "Parça Parametre Şablonu Sil"
-#: part/views.py:1010
+#: part/views.py:999
msgid "Delete Part Category"
msgstr ""
-#: part/views.py:1016
+#: part/views.py:1005
msgid "Part category was deleted"
msgstr ""
-#: part/views.py:1025
+#: part/views.py:1014
msgid "Create Category Parameter Template"
msgstr "Kategori Parametre Şablonu Oluştur"
-#: part/views.py:1126
+#: part/views.py:1115
msgid "Edit Category Parameter Template"
msgstr "Kategori Parametre Şablonu Düzenle"
-#: part/views.py:1182
+#: part/views.py:1171
msgid "Delete Category Parameter Template"
msgstr "Kategori Parametre Şablonu Sil"
-#: plugin/apps.py:49
+#: plugin/apps.py:48
msgid "Your enviroment has an outdated git version. This prevents InvenTree from loading plugin details."
msgstr ""
@@ -5489,47 +5490,47 @@ msgstr "İşlem belirtilmedi"
msgid "No matching action found"
msgstr "Eşleşen eylem bulunamadı"
-#: plugin/base/barcodes/api.py:53 plugin/base/barcodes/api.py:153
+#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:152
msgid "Must provide barcode_data parameter"
msgstr "Barcode_data parametresini sağlamalıdır"
-#: plugin/base/barcodes/api.py:129
+#: plugin/base/barcodes/api.py:128
msgid "No match found for barcode data"
msgstr "Barkod verisi için eşleşme bulunamadı"
-#: plugin/base/barcodes/api.py:131
+#: plugin/base/barcodes/api.py:130
msgid "Match found for barcode data"
msgstr "Barkod verisi için eşleşme bulundu"
-#: plugin/base/barcodes/api.py:156
+#: plugin/base/barcodes/api.py:155
msgid "Must provide stockitem parameter"
msgstr "Stok kalemi parametresi sağlamalıdır"
-#: plugin/base/barcodes/api.py:163
+#: plugin/base/barcodes/api.py:162
msgid "No matching stock item found"
msgstr "Eşleşen stok kalemi bulunamadı"
-#: plugin/base/barcodes/api.py:193
+#: plugin/base/barcodes/api.py:192
msgid "Barcode already matches Stock Item"
msgstr ""
-#: plugin/base/barcodes/api.py:197
+#: plugin/base/barcodes/api.py:196
msgid "Barcode already matches Stock Location"
msgstr ""
-#: plugin/base/barcodes/api.py:201
+#: plugin/base/barcodes/api.py:200
msgid "Barcode already matches Part"
msgstr ""
-#: plugin/base/barcodes/api.py:207 plugin/base/barcodes/api.py:219
+#: plugin/base/barcodes/api.py:206 plugin/base/barcodes/api.py:218
msgid "Barcode hash already matches Stock Item"
msgstr ""
-#: plugin/base/barcodes/api.py:225
+#: plugin/base/barcodes/api.py:224
msgid "Barcode associated with Stock Item"
msgstr ""
-#: plugin/base/label/label.py:40
+#: plugin/base/label/label.py:39
msgid "Label printing failed"
msgstr ""
@@ -5551,51 +5552,51 @@ msgstr ""
msgid "Allow sending of emails for event notifications"
msgstr ""
-#: plugin/models.py:36
+#: plugin/models.py:35
msgid "Plugin Metadata"
msgstr ""
-#: plugin/models.py:37
+#: plugin/models.py:36
msgid "JSON metadata field, for use by external plugins"
msgstr ""
-#: plugin/models.py:86
+#: plugin/models.py:85
msgid "Plugin Configuration"
msgstr ""
-#: plugin/models.py:87
+#: plugin/models.py:86
msgid "Plugin Configurations"
msgstr ""
-#: plugin/models.py:92
+#: plugin/models.py:91
msgid "Key"
msgstr ""
-#: plugin/models.py:93
+#: plugin/models.py:92
msgid "Key of plugin"
msgstr ""
-#: plugin/models.py:101
+#: plugin/models.py:100
msgid "PluginName of the plugin"
msgstr ""
-#: plugin/models.py:107
+#: plugin/models.py:106
msgid "Is the plugin active"
msgstr ""
-#: plugin/models.py:180
+#: plugin/models.py:179
msgid "Plugin"
msgstr ""
-#: plugin/models.py:254
+#: plugin/models.py:253
msgid "Method"
msgstr ""
-#: plugin/plugin.py:247
+#: plugin/plugin.py:246
msgid "No author found"
msgstr ""
-#: plugin/plugin.py:261
+#: plugin/plugin.py:260
msgid "No date found"
msgstr ""
@@ -5663,92 +5664,96 @@ msgstr ""
msgid "Either packagename of URL must be provided"
msgstr ""
-#: report/api.py:233 report/api.py:280
+#: report/api.py:191
+msgid "No valid objects provided to template"
+msgstr "Şablon için geçerli bir nesne sağlanmadı"
+
+#: report/api.py:223 report/api.py:270
#, python-brace-format
msgid "Template file '{template}' is missing or does not exist"
msgstr ""
-#: report/models.py:175
+#: report/models.py:170
msgid "Template name"
msgstr "Şablon adı"
-#: report/models.py:181
+#: report/models.py:176
msgid "Report template file"
msgstr "Rapor şablon dosyası"
-#: report/models.py:188
+#: report/models.py:183
msgid "Report template description"
msgstr "Rapor şablon tanımı"
-#: report/models.py:194
+#: report/models.py:189
msgid "Report revision number (auto-increments)"
msgstr "Revizyon numarası raporla (otomatik artış)"
-#: report/models.py:285
+#: report/models.py:280
msgid "Pattern for generating report filenames"
msgstr ""
-#: report/models.py:292
+#: report/models.py:287
msgid "Report template is enabled"
msgstr "Rapor şablonu etkin"
-#: report/models.py:316
+#: report/models.py:311
msgid "StockItem query filters (comma-separated list of key=value pairs)"
msgstr "Stok kalemi sorgu filtreleri (anahter=değer [key=value] olarak virgülle ayrılmış liste)"
-#: report/models.py:324
+#: report/models.py:319
msgid "Include Installed Tests"
msgstr ""
-#: report/models.py:325
+#: report/models.py:320
msgid "Include test results for stock items installed inside assembled item"
msgstr ""
-#: report/models.py:375
+#: report/models.py:370
msgid "Build Filters"
msgstr ""
-#: report/models.py:376
+#: report/models.py:371
msgid "Build query filters (comma-separated list of key=value pairs"
msgstr ""
-#: report/models.py:418
+#: report/models.py:413
msgid "Part Filters"
msgstr ""
-#: report/models.py:419
+#: report/models.py:414
msgid "Part query filters (comma-separated list of key=value pairs"
msgstr ""
-#: report/models.py:453
+#: report/models.py:448
msgid "Purchase order query filters"
msgstr ""
-#: report/models.py:492
+#: report/models.py:487
msgid "Sales order query filters"
msgstr ""
-#: report/models.py:547
+#: report/models.py:542
msgid "Snippet"
msgstr ""
-#: report/models.py:548
+#: report/models.py:543
msgid "Report snippet file"
msgstr ""
-#: report/models.py:552
+#: report/models.py:547
msgid "Snippet file description"
msgstr ""
-#: report/models.py:587
+#: report/models.py:582
msgid "Asset"
msgstr ""
-#: report/models.py:588
+#: report/models.py:583
msgid "Report asset file"
msgstr ""
-#: report/models.py:591
+#: report/models.py:586
msgid "Asset file description"
msgstr ""
@@ -5765,12 +5770,12 @@ msgid "Stock Item Test Report"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:79
-#: stock/models.py:664 stock/templates/stock/item_base.html:162
+#: stock/models.py:655 stock/templates/stock/item_base.html:162
#: templates/js/translated/build.js:420 templates/js/translated/build.js:572
#: templates/js/translated/build.js:1178 templates/js/translated/build.js:1688
#: templates/js/translated/model_renderers.js:106
-#: templates/js/translated/order.js:108 templates/js/translated/order.js:2836
-#: templates/js/translated/order.js:2925 templates/js/translated/stock.js:435
+#: templates/js/translated/order.js:109 templates/js/translated/order.js:2991
+#: templates/js/translated/order.js:3080 templates/js/translated/stock.js:435
msgid "Serial Number"
msgstr "Seri Numara"
@@ -5779,19 +5784,19 @@ msgid "Test Results"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:93
-#: stock/models.py:2192
+#: stock/models.py:2183
msgid "Test"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:94
-#: stock/models.py:2198
+#: stock/models.py:2189
msgid "Result"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:97
#: templates/InvenTree/settings/plugin.html:51
#: templates/InvenTree/settings/plugin_settings.html:38
-#: templates/js/translated/order.js:1469 templates/js/translated/stock.js:2345
+#: templates/js/translated/order.js:1575 templates/js/translated/stock.js:2345
msgid "Date"
msgstr ""
@@ -5814,362 +5819,362 @@ msgstr ""
msgid "Serial"
msgstr "Seri No"
-#: stock/api.py:554
+#: stock/api.py:542
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:561
+#: stock/api.py:549
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:586
+#: stock/api.py:574
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/models.py:91 stock/models.py:759
+#: stock/models.py:82 stock/models.py:750
#: stock/templates/stock/item_base.html:417
msgid "Owner"
msgstr ""
-#: stock/models.py:92 stock/models.py:760
+#: stock/models.py:83 stock/models.py:751
msgid "Select Owner"
msgstr ""
-#: stock/models.py:468
+#: stock/models.py:459
msgid "StockItem with this serial number already exists"
msgstr "Bu seri numarasına sahip stok kalemi zaten var"
-#: stock/models.py:512
+#: stock/models.py:503
#, python-brace-format
msgid "Part type ('{pf}') must be {pe}"
msgstr ""
-#: stock/models.py:522 stock/models.py:531
+#: stock/models.py:513 stock/models.py:522
msgid "Quantity must be 1 for item with a serial number"
msgstr "Seri numarası olan ögenin miktarı bir olmalı"
-#: stock/models.py:523
+#: stock/models.py:514
msgid "Serial number cannot be set if quantity greater than 1"
msgstr "Miktar birden büyük ise seri numarası ayarlanamaz"
-#: stock/models.py:545
+#: stock/models.py:536
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:551
+#: stock/models.py:542
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:565
+#: stock/models.py:556
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:608
+#: stock/models.py:599
msgid "Parent Stock Item"
msgstr "Üst Stok Kalemi"
-#: stock/models.py:617
+#: stock/models.py:608
msgid "Base part"
msgstr ""
-#: stock/models.py:625
+#: stock/models.py:616
msgid "Select a matching supplier part for this stock item"
msgstr "Bu stok kalemi için tedarikçi parçası seçin"
-#: stock/models.py:631 stock/templates/stock/location.html:17
+#: stock/models.py:622 stock/templates/stock/location.html:17
#: stock/templates/stock/stock_app_base.html:8
msgid "Stock Location"
msgstr "Stok Konumu"
-#: stock/models.py:634
+#: stock/models.py:625
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:641
+#: stock/models.py:632
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:647 stock/templates/stock/item_base.html:288
+#: stock/models.py:638 stock/templates/stock/item_base.html:288
msgid "Installed In"
msgstr ""
-#: stock/models.py:650
+#: stock/models.py:641
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:666
+#: stock/models.py:657
msgid "Serial number for this item"
msgstr "Bu öge için seri numarası"
-#: stock/models.py:680
+#: stock/models.py:671
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:685
+#: stock/models.py:676
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:694
+#: stock/models.py:685
msgid "Source Build"
msgstr ""
-#: stock/models.py:696
+#: stock/models.py:687
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:707
+#: stock/models.py:698
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:710
+#: stock/models.py:701
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:716
+#: stock/models.py:707
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:722 stock/templates/stock/item_base.html:199
+#: stock/models.py:713 stock/templates/stock/item_base.html:199
#: templates/js/translated/stock.js:1822
msgid "Expiry Date"
msgstr ""
-#: stock/models.py:723
+#: stock/models.py:714
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:736
+#: stock/models.py:727
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:736
+#: stock/models.py:727
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:746 stock/templates/stock/item.html:137
+#: stock/models.py:737 stock/templates/stock/item.html:137
msgid "Stock Item Notes"
msgstr ""
-#: stock/models.py:755
+#: stock/models.py:746
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:787
+#: stock/models.py:778
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1307
+#: stock/models.py:1298
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1313
+#: stock/models.py:1304
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1319
+#: stock/models.py:1310
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({n})"
msgstr ""
-#: stock/models.py:1322
+#: stock/models.py:1313
msgid "Serial numbers must be a list of integers"
msgstr "Seri numaraları tam sayı listesi olmalı"
-#: stock/models.py:1325
+#: stock/models.py:1316
msgid "Quantity does not match serial numbers"
msgstr "Miktar seri numaları ile eşleşmiyor"
-#: stock/models.py:1332
+#: stock/models.py:1323
#, python-brace-format
msgid "Serial numbers already exist: {exists}"
msgstr "Seri numaraları zaten mevcut: {exists}"
-#: stock/models.py:1403
+#: stock/models.py:1394
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:1406
+#: stock/models.py:1397
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:1409
+#: stock/models.py:1400
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:1412
+#: stock/models.py:1403
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:1415
+#: stock/models.py:1406
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:1418
+#: stock/models.py:1409
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:1425 stock/serializers.py:871
+#: stock/models.py:1416 stock/serializers.py:863
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:1429
+#: stock/models.py:1420
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:1433
+#: stock/models.py:1424
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:1437
+#: stock/models.py:1428
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:1609
+#: stock/models.py:1600
msgid "StockItem cannot be moved as it is not in stock"
msgstr "Stok kalemi stokta olmadığı için taşınamaz"
-#: stock/models.py:2112
+#: stock/models.py:2103
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2169
+#: stock/models.py:2160
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:2175
+#: stock/models.py:2166
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:2193
+#: stock/models.py:2184
msgid "Test name"
msgstr ""
-#: stock/models.py:2199
+#: stock/models.py:2190
msgid "Test result"
msgstr ""
-#: stock/models.py:2205
+#: stock/models.py:2196
msgid "Test output value"
msgstr ""
-#: stock/models.py:2212
+#: stock/models.py:2203
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:2218
+#: stock/models.py:2209
msgid "Test notes"
msgstr ""
-#: stock/serializers.py:170
+#: stock/serializers.py:162
msgid "Purchase price of this stock item"
msgstr ""
-#: stock/serializers.py:291
+#: stock/serializers.py:283
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:306
+#: stock/serializers.py:298
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:312
+#: stock/serializers.py:304
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:323 stock/serializers.py:828 stock/serializers.py:1069
+#: stock/serializers.py:315 stock/serializers.py:820 stock/serializers.py:1061
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:330
+#: stock/serializers.py:322
msgid "Optional note field"
msgstr ""
-#: stock/serializers.py:343
+#: stock/serializers.py:335
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:360
+#: stock/serializers.py:352
msgid "Serial numbers already exist"
msgstr "Seri numaraları zaten mevcut"
-#: stock/serializers.py:402
+#: stock/serializers.py:394
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:418
+#: stock/serializers.py:410
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:425
+#: stock/serializers.py:417
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:463
+#: stock/serializers.py:455
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:468
+#: stock/serializers.py:460
msgid "Add transaction note (optional)"
msgstr "İşlem notu ekle (isteğe bağlı)"
-#: stock/serializers.py:685
+#: stock/serializers.py:677
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:689
+#: stock/serializers.py:681
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:693
+#: stock/serializers.py:685
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:723
+#: stock/serializers.py:715
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:729
+#: stock/serializers.py:721
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:737
+#: stock/serializers.py:729
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:747 stock/serializers.py:977
+#: stock/serializers.py:739 stock/serializers.py:969
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:835
+#: stock/serializers.py:827
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:840
+#: stock/serializers.py:832
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:841
+#: stock/serializers.py:833
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:846
+#: stock/serializers.py:838
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:847
+#: stock/serializers.py:839
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:857
+#: stock/serializers.py:849
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:939
+#: stock/serializers.py:931
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:967
+#: stock/serializers.py:959
msgid "Stock transaction notes"
msgstr ""
@@ -6482,7 +6487,7 @@ msgid "Sublocations"
msgstr "Alt konumlar"
#: stock/templates/stock/location.html:156 templates/InvenTree/search.html:164
-#: templates/js/translated/search.js:153 users/models.py:42
+#: templates/js/translated/search.js:153 users/models.py:40
msgid "Stock Locations"
msgstr "Stok Konumları"
@@ -6534,7 +6539,7 @@ msgstr ""
msgid "Child Items"
msgstr ""
-#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:227
+#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:221
msgid "Convert Stock Item"
msgstr "Stok Kalemine Dönüştür"
@@ -6559,55 +6564,55 @@ msgstr "Bu işlem kolayca geri alınamaz"
msgid "Are you sure you want to delete this stock tracking entry?"
msgstr ""
-#: stock/views.py:125
+#: stock/views.py:119
msgid "Stock Location QR code"
msgstr "Stok Konumu QR Kodu"
-#: stock/views.py:144
+#: stock/views.py:138
msgid "Return to Stock"
msgstr ""
-#: stock/views.py:153
+#: stock/views.py:147
msgid "Specify a valid location"
msgstr "Geçerli bir konum belirtiniz"
-#: stock/views.py:164
+#: stock/views.py:158
msgid "Stock item returned from customer"
msgstr ""
-#: stock/views.py:175
+#: stock/views.py:169
msgid "Delete All Test Data"
msgstr ""
-#: stock/views.py:192
+#: stock/views.py:186
msgid "Confirm test data deletion"
msgstr ""
-#: stock/views.py:193
+#: stock/views.py:187
msgid "Check the confirmation box"
msgstr "Onay kutusunu işaretleyin"
-#: stock/views.py:208
+#: stock/views.py:202
msgid "Stock Item QR Code"
msgstr ""
-#: stock/views.py:264
+#: stock/views.py:258
msgid "Delete Stock Location"
msgstr "Stok Konumunu Sil"
-#: stock/views.py:277
+#: stock/views.py:271
msgid "Delete Stock Item"
msgstr ""
-#: stock/views.py:288
+#: stock/views.py:282
msgid "Delete Stock Tracking Entry"
msgstr ""
-#: stock/views.py:295
+#: stock/views.py:289
msgid "Edit Stock Tracking Entry"
msgstr ""
-#: stock/views.py:304
+#: stock/views.py:298
msgid "Add Stock Tracking Entry"
msgstr ""
@@ -6881,7 +6886,7 @@ msgid "Install Plugin"
msgstr ""
#: templates/InvenTree/settings/plugin.html:48 templates/navbar.html:137
-#: users/models.py:39
+#: users/models.py:37
msgid "Admin"
msgstr ""
@@ -7326,9 +7331,9 @@ msgstr "InvenTree Sürüm Bilgisi"
#: templates/about.html:11 templates/about.html:105
#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621
-#: templates/js/translated/modals.js:55 templates/js/translated/modals.js:591
-#: templates/js/translated/modals.js:685 templates/js/translated/modals.js:993
-#: templates/js/translated/order.js:807 templates/modals.html:15
+#: templates/js/translated/modals.js:55 templates/js/translated/modals.js:594
+#: templates/js/translated/modals.js:688 templates/js/translated/modals.js:996
+#: templates/js/translated/order.js:913 templates/modals.html:15
#: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50
msgid "Close"
msgstr "Kapat"
@@ -7639,11 +7644,11 @@ msgstr ""
msgid "Remote image must not exceed maximum allowable file size"
msgstr ""
-#: templates/js/translated/api.js:190 templates/js/translated/modals.js:1063
+#: templates/js/translated/api.js:190 templates/js/translated/modals.js:1066
msgid "No Response"
msgstr "Cevap Yok"
-#: templates/js/translated/api.js:191 templates/js/translated/modals.js:1064
+#: templates/js/translated/api.js:191 templates/js/translated/modals.js:1067
msgid "No response from the InvenTree server"
msgstr ""
@@ -7655,27 +7660,27 @@ msgstr ""
msgid "API request returned error code 400"
msgstr ""
-#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1073
+#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1076
msgid "Error 401: Not Authenticated"
msgstr ""
-#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1074
+#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1077
msgid "Authentication credentials not supplied"
msgstr ""
-#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1078
+#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1081
msgid "Error 403: Permission Denied"
msgstr ""
-#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1079
+#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1082
msgid "You do not have the required permissions to access this function"
msgstr "Bu fonksiyona erişmek için gerekli izinlere sahip değilsiniz"
-#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1083
+#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1086
msgid "Error 404: Resource Not Found"
msgstr ""
-#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1084
+#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1087
msgid "The requested resource could not be located on the server"
msgstr ""
@@ -7687,11 +7692,11 @@ msgstr ""
msgid "HTTP method not allowed at URL"
msgstr ""
-#: templates/js/translated/api.js:222 templates/js/translated/modals.js:1088
+#: templates/js/translated/api.js:222 templates/js/translated/modals.js:1091
msgid "Error 408: Timeout"
msgstr ""
-#: templates/js/translated/api.js:223 templates/js/translated/modals.js:1089
+#: templates/js/translated/api.js:223 templates/js/translated/modals.js:1092
msgid "Connection timeout while requesting data from server"
msgstr ""
@@ -7760,7 +7765,7 @@ msgid "Unknown response from server"
msgstr ""
#: templates/js/translated/barcode.js:182
-#: templates/js/translated/modals.js:1053
+#: templates/js/translated/modals.js:1056
msgid "Invalid server response"
msgstr ""
@@ -7842,12 +7847,12 @@ msgid "Download BOM Template"
msgstr ""
#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287
-#: templates/js/translated/order.js:588 templates/js/translated/tables.js:53
+#: templates/js/translated/order.js:694 templates/js/translated/tables.js:53
msgid "Format"
msgstr ""
#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288
-#: templates/js/translated/order.js:589
+#: templates/js/translated/order.js:695
msgid "Select file format"
msgstr ""
@@ -8147,12 +8152,12 @@ msgid "No required tests for this build"
msgstr ""
#: templates/js/translated/build.js:1727 templates/js/translated/build.js:2556
-#: templates/js/translated/order.js:2873
+#: templates/js/translated/order.js:3028
msgid "Edit stock allocation"
msgstr "Stok tahsisini düzenle"
#: templates/js/translated/build.js:1729 templates/js/translated/build.js:2557
-#: templates/js/translated/order.js:2874
+#: templates/js/translated/order.js:3029
msgid "Delete stock allocation"
msgstr "Stok tahsisini sil"
@@ -8181,11 +8186,11 @@ msgid "Sufficient stock available"
msgstr ""
#: templates/js/translated/build.js:1856 templates/js/translated/build.js:2101
-#: templates/js/translated/build.js:2552 templates/js/translated/order.js:3160
+#: templates/js/translated/build.js:2552 templates/js/translated/order.js:3315
msgid "Allocated"
msgstr ""
-#: templates/js/translated/build.js:1904 templates/js/translated/order.js:3240
+#: templates/js/translated/build.js:1904 templates/js/translated/order.js:3395
msgid "Build stock"
msgstr ""
@@ -8193,21 +8198,21 @@ msgstr ""
msgid "Order stock"
msgstr ""
-#: templates/js/translated/build.js:1911 templates/js/translated/order.js:3233
+#: templates/js/translated/build.js:1911 templates/js/translated/order.js:3388
msgid "Allocate stock"
msgstr ""
#: templates/js/translated/build.js:1950 templates/js/translated/label.js:172
-#: templates/js/translated/order.js:635 templates/js/translated/order.js:2449
+#: templates/js/translated/order.js:741 templates/js/translated/order.js:2555
#: templates/js/translated/report.js:225
msgid "Select Parts"
msgstr "Parçaları Seçin"
-#: templates/js/translated/build.js:1951 templates/js/translated/order.js:2450
+#: templates/js/translated/build.js:1951 templates/js/translated/order.js:2556
msgid "You must select at least one part to allocate"
msgstr ""
-#: templates/js/translated/build.js:2000 templates/js/translated/order.js:2398
+#: templates/js/translated/build.js:2000 templates/js/translated/order.js:2504
msgid "Specify stock allocation quantity"
msgstr ""
@@ -8219,7 +8224,7 @@ msgstr ""
msgid "All selected parts have been fully allocated"
msgstr ""
-#: templates/js/translated/build.js:2089 templates/js/translated/order.js:2464
+#: templates/js/translated/build.js:2089 templates/js/translated/order.js:2570
msgid "Select source location (leave blank to take from all locations)"
msgstr ""
@@ -8227,11 +8232,11 @@ msgstr ""
msgid "Allocate Stock Items to Build Order"
msgstr ""
-#: templates/js/translated/build.js:2128 templates/js/translated/order.js:2512
+#: templates/js/translated/build.js:2128 templates/js/translated/order.js:2667
msgid "No matching stock locations"
msgstr ""
-#: templates/js/translated/build.js:2200 templates/js/translated/order.js:2589
+#: templates/js/translated/build.js:2200 templates/js/translated/order.js:2744
msgid "No matching stock items"
msgstr ""
@@ -8305,7 +8310,7 @@ msgstr ""
msgid "Delete Manufacturer Part"
msgstr ""
-#: templates/js/translated/company.js:165 templates/js/translated/order.js:385
+#: templates/js/translated/company.js:165 templates/js/translated/order.js:491
msgid "Add Supplier"
msgstr ""
@@ -8440,40 +8445,40 @@ msgstr ""
msgid "View operation not allowed"
msgstr ""
-#: templates/js/translated/forms.js:641
+#: templates/js/translated/forms.js:646
msgid "Keep this form open"
msgstr ""
-#: templates/js/translated/forms.js:716
+#: templates/js/translated/forms.js:746
msgid "Enter a valid number"
msgstr ""
-#: templates/js/translated/forms.js:1208 templates/modals.html:19
+#: templates/js/translated/forms.js:1238 templates/modals.html:19
#: templates/modals.html:43
msgid "Form errors exist"
msgstr ""
-#: templates/js/translated/forms.js:1634
+#: templates/js/translated/forms.js:1671
msgid "No results found"
msgstr ""
-#: templates/js/translated/forms.js:1849 templates/search.html:29
+#: templates/js/translated/forms.js:1886 templates/search.html:29
msgid "Searching"
msgstr ""
-#: templates/js/translated/forms.js:2102
+#: templates/js/translated/forms.js:2139
msgid "Clear input"
msgstr ""
-#: templates/js/translated/forms.js:2567
+#: templates/js/translated/forms.js:2605
msgid "File Column"
msgstr ""
-#: templates/js/translated/forms.js:2567
+#: templates/js/translated/forms.js:2605
msgid "Field Name"
msgstr ""
-#: templates/js/translated/forms.js:2579
+#: templates/js/translated/forms.js:2617
msgid "Select Columns"
msgstr ""
@@ -8547,62 +8552,62 @@ msgstr ""
msgid "Select Label Template"
msgstr "Etiket Şablonu Seç"
-#: templates/js/translated/modals.js:78 templates/js/translated/modals.js:138
-#: templates/js/translated/modals.js:617
+#: templates/js/translated/modals.js:81 templates/js/translated/modals.js:141
+#: templates/js/translated/modals.js:620
msgid "Cancel"
msgstr ""
-#: templates/js/translated/modals.js:79 templates/js/translated/modals.js:137
-#: templates/js/translated/modals.js:684 templates/js/translated/modals.js:992
+#: templates/js/translated/modals.js:82 templates/js/translated/modals.js:140
+#: templates/js/translated/modals.js:687 templates/js/translated/modals.js:995
#: templates/modals.html:28 templates/modals.html:51
msgid "Submit"
msgstr ""
-#: templates/js/translated/modals.js:136
+#: templates/js/translated/modals.js:139
msgid "Form Title"
msgstr ""
-#: templates/js/translated/modals.js:399
+#: templates/js/translated/modals.js:402
msgid "Waiting for server..."
msgstr ""
-#: templates/js/translated/modals.js:558
+#: templates/js/translated/modals.js:561
msgid "Show Error Information"
msgstr ""
-#: templates/js/translated/modals.js:616
+#: templates/js/translated/modals.js:619
msgid "Accept"
msgstr ""
-#: templates/js/translated/modals.js:673
+#: templates/js/translated/modals.js:676
msgid "Loading Data"
msgstr ""
-#: templates/js/translated/modals.js:944
+#: templates/js/translated/modals.js:947
msgid "Invalid response from server"
msgstr ""
-#: templates/js/translated/modals.js:944
+#: templates/js/translated/modals.js:947
msgid "Form data missing from server response"
msgstr ""
-#: templates/js/translated/modals.js:956
+#: templates/js/translated/modals.js:959
msgid "Error posting form data"
msgstr ""
-#: templates/js/translated/modals.js:1053
+#: templates/js/translated/modals.js:1056
msgid "JSON response missing form data"
msgstr ""
-#: templates/js/translated/modals.js:1068
+#: templates/js/translated/modals.js:1071
msgid "Error 400: Bad Request"
msgstr ""
-#: templates/js/translated/modals.js:1069
+#: templates/js/translated/modals.js:1072
msgid "Server returned error code 400"
msgstr ""
-#: templates/js/translated/modals.js:1092
+#: templates/js/translated/modals.js:1095
msgid "Error requesting form data"
msgstr ""
@@ -8660,361 +8665,377 @@ msgstr ""
msgid "Notifications will load here"
msgstr ""
-#: templates/js/translated/order.js:84
+#: templates/js/translated/order.js:85
msgid "No stock items have been allocated to this shipment"
msgstr ""
-#: templates/js/translated/order.js:89
+#: templates/js/translated/order.js:90
msgid "The following stock items will be shipped"
msgstr ""
-#: templates/js/translated/order.js:129
+#: templates/js/translated/order.js:130
msgid "Complete Shipment"
msgstr ""
-#: templates/js/translated/order.js:135
+#: templates/js/translated/order.js:141
msgid "Confirm Shipment"
msgstr ""
-#: templates/js/translated/order.js:157
+#: templates/js/translated/order.js:197
+msgid "No pending shipments found"
+msgstr ""
+
+#: templates/js/translated/order.js:201
+msgid "No stock items have been allocated to pending shipments"
+msgstr ""
+
+#: templates/js/translated/order.js:233
+msgid "Skip"
+msgstr ""
+
+#: templates/js/translated/order.js:263
msgid "Complete Purchase Order"
msgstr ""
-#: templates/js/translated/order.js:163
+#: templates/js/translated/order.js:269
msgid "Mark this order as complete?"
msgstr ""
-#: templates/js/translated/order.js:169
+#: templates/js/translated/order.js:275
msgid "All line items have been received"
msgstr ""
-#: templates/js/translated/order.js:174
+#: templates/js/translated/order.js:280
msgid "This order has line items which have not been marked as received."
msgstr ""
-#: templates/js/translated/order.js:175
+#: templates/js/translated/order.js:281
msgid "Completing this order means that the order and line items will no longer be editable."
msgstr ""
-#: templates/js/translated/order.js:198
+#: templates/js/translated/order.js:304
msgid "Cancel Purchase Order"
msgstr ""
-#: templates/js/translated/order.js:203
+#: templates/js/translated/order.js:309
msgid "Are you sure you wish to cancel this purchase order?"
msgstr ""
-#: templates/js/translated/order.js:209
+#: templates/js/translated/order.js:315
msgid "This purchase order can not be cancelled"
msgstr ""
-#: templates/js/translated/order.js:232
+#: templates/js/translated/order.js:338
msgid "Issue Purchase Order"
msgstr ""
-#: templates/js/translated/order.js:237
+#: templates/js/translated/order.js:343
msgid "After placing this purchase order, line items will no longer be editable."
msgstr ""
-#: templates/js/translated/order.js:259
+#: templates/js/translated/order.js:365
msgid "Cancel Sales Order"
msgstr ""
-#: templates/js/translated/order.js:264
+#: templates/js/translated/order.js:370
msgid "Cancelling this order means that the order will no longer be editable."
msgstr ""
-#: templates/js/translated/order.js:318
+#: templates/js/translated/order.js:424
msgid "Create New Shipment"
msgstr ""
-#: templates/js/translated/order.js:343
+#: templates/js/translated/order.js:449
msgid "Add Customer"
msgstr ""
-#: templates/js/translated/order.js:368
+#: templates/js/translated/order.js:474
msgid "Create Sales Order"
msgstr ""
-#: templates/js/translated/order.js:585
+#: templates/js/translated/order.js:691
msgid "Export Order"
msgstr ""
-#: templates/js/translated/order.js:636
+#: templates/js/translated/order.js:742
msgid "At least one purchaseable part must be selected"
msgstr ""
-#: templates/js/translated/order.js:661
+#: templates/js/translated/order.js:767
msgid "Quantity to order"
msgstr ""
-#: templates/js/translated/order.js:670
+#: templates/js/translated/order.js:776
msgid "New supplier part"
msgstr ""
-#: templates/js/translated/order.js:688
+#: templates/js/translated/order.js:794
msgid "New purchase order"
msgstr ""
-#: templates/js/translated/order.js:721
+#: templates/js/translated/order.js:827
msgid "Add to purchase order"
msgstr ""
-#: templates/js/translated/order.js:830
+#: templates/js/translated/order.js:936
msgid "No matching supplier parts"
msgstr ""
-#: templates/js/translated/order.js:845
+#: templates/js/translated/order.js:951
msgid "No matching purchase orders"
msgstr ""
-#: templates/js/translated/order.js:1001
+#: templates/js/translated/order.js:1107
msgid "Select Line Items"
msgstr ""
-#: templates/js/translated/order.js:1002
+#: templates/js/translated/order.js:1108
msgid "At least one line item must be selected"
msgstr ""
-#: templates/js/translated/order.js:1022 templates/js/translated/order.js:1121
+#: templates/js/translated/order.js:1128 templates/js/translated/order.js:1227
msgid "Add batch code"
msgstr ""
-#: templates/js/translated/order.js:1028 templates/js/translated/order.js:1132
+#: templates/js/translated/order.js:1134 templates/js/translated/order.js:1238
msgid "Add serial numbers"
msgstr ""
-#: templates/js/translated/order.js:1040
+#: templates/js/translated/order.js:1146
msgid "Quantity to receive"
msgstr ""
-#: templates/js/translated/order.js:1104 templates/js/translated/stock.js:2085
+#: templates/js/translated/order.js:1210 templates/js/translated/stock.js:2085
msgid "Stock Status"
msgstr ""
-#: templates/js/translated/order.js:1195
+#: templates/js/translated/order.js:1301
msgid "Order Code"
msgstr ""
-#: templates/js/translated/order.js:1196
+#: templates/js/translated/order.js:1302
msgid "Ordered"
msgstr ""
-#: templates/js/translated/order.js:1198
+#: templates/js/translated/order.js:1304
msgid "Quantity to Receive"
msgstr ""
-#: templates/js/translated/order.js:1217
+#: templates/js/translated/order.js:1323
msgid "Confirm receipt of items"
msgstr ""
-#: templates/js/translated/order.js:1218
+#: templates/js/translated/order.js:1324
msgid "Receive Purchase Order Items"
msgstr ""
-#: templates/js/translated/order.js:1410 templates/js/translated/part.js:870
+#: templates/js/translated/order.js:1516 templates/js/translated/part.js:870
msgid "No purchase orders found"
msgstr ""
-#: templates/js/translated/order.js:1435 templates/js/translated/order.js:2120
+#: templates/js/translated/order.js:1541 templates/js/translated/order.js:2226
msgid "Order is overdue"
msgstr ""
-#: templates/js/translated/order.js:1485 templates/js/translated/order.js:2185
-#: templates/js/translated/order.js:2315
+#: templates/js/translated/order.js:1591 templates/js/translated/order.js:2291
+#: templates/js/translated/order.js:2421
msgid "Items"
msgstr "Ürünler"
-#: templates/js/translated/order.js:1559 templates/js/translated/order.js:3292
+#: templates/js/translated/order.js:1665 templates/js/translated/order.js:3447
msgid "Duplicate Line Item"
msgstr ""
-#: templates/js/translated/order.js:1576 templates/js/translated/order.js:3314
+#: templates/js/translated/order.js:1682 templates/js/translated/order.js:3469
msgid "Edit Line Item"
msgstr ""
-#: templates/js/translated/order.js:1589 templates/js/translated/order.js:3325
+#: templates/js/translated/order.js:1695 templates/js/translated/order.js:3480
msgid "Delete Line Item"
msgstr ""
-#: templates/js/translated/order.js:1632
+#: templates/js/translated/order.js:1738
msgid "No line items found"
msgstr ""
-#: templates/js/translated/order.js:1659 templates/js/translated/order.js:3049
+#: templates/js/translated/order.js:1765 templates/js/translated/order.js:3204
msgid "Total"
msgstr ""
-#: templates/js/translated/order.js:1713 templates/js/translated/order.js:1915
-#: templates/js/translated/order.js:3074 templates/js/translated/order.js:3557
+#: templates/js/translated/order.js:1819 templates/js/translated/order.js:2021
+#: templates/js/translated/order.js:3229 templates/js/translated/order.js:3714
#: templates/js/translated/part.js:1948 templates/js/translated/part.js:2301
msgid "Unit Price"
msgstr ""
-#: templates/js/translated/order.js:1728 templates/js/translated/order.js:1931
-#: templates/js/translated/order.js:3090 templates/js/translated/order.js:3573
+#: templates/js/translated/order.js:1834 templates/js/translated/order.js:2037
+#: templates/js/translated/order.js:3245 templates/js/translated/order.js:3730
msgid "Total Price"
msgstr ""
-#: templates/js/translated/order.js:1769 templates/js/translated/order.js:3132
+#: templates/js/translated/order.js:1875 templates/js/translated/order.js:3287
#: templates/js/translated/part.js:979
msgid "This line item is overdue"
msgstr ""
-#: templates/js/translated/order.js:1828 templates/js/translated/part.js:1025
+#: templates/js/translated/order.js:1934 templates/js/translated/part.js:1025
msgid "Receive line item"
msgstr ""
-#: templates/js/translated/order.js:1832 templates/js/translated/order.js:3246
+#: templates/js/translated/order.js:1938 templates/js/translated/order.js:3401
msgid "Duplicate line item"
msgstr ""
-#: templates/js/translated/order.js:1833 templates/js/translated/order.js:3247
+#: templates/js/translated/order.js:1939 templates/js/translated/order.js:3402
msgid "Edit line item"
msgstr ""
-#: templates/js/translated/order.js:1834 templates/js/translated/order.js:3251
+#: templates/js/translated/order.js:1940 templates/js/translated/order.js:3406
msgid "Delete line item"
msgstr ""
-#: templates/js/translated/order.js:1980 templates/js/translated/order.js:3622
+#: templates/js/translated/order.js:2086 templates/js/translated/order.js:3779
msgid "Duplicate line"
msgstr ""
-#: templates/js/translated/order.js:1981 templates/js/translated/order.js:3623
+#: templates/js/translated/order.js:2087 templates/js/translated/order.js:3780
msgid "Edit line"
msgstr ""
-#: templates/js/translated/order.js:1982 templates/js/translated/order.js:3624
+#: templates/js/translated/order.js:2088 templates/js/translated/order.js:3781
msgid "Delete line"
msgstr ""
-#: templates/js/translated/order.js:2012 templates/js/translated/order.js:3654
+#: templates/js/translated/order.js:2118 templates/js/translated/order.js:3811
msgid "Duplicate Line"
msgstr ""
-#: templates/js/translated/order.js:2033 templates/js/translated/order.js:3675
+#: templates/js/translated/order.js:2139 templates/js/translated/order.js:3832
msgid "Edit Line"
msgstr ""
-#: templates/js/translated/order.js:2044 templates/js/translated/order.js:3686
+#: templates/js/translated/order.js:2150 templates/js/translated/order.js:3843
msgid "Delete Line"
msgstr ""
-#: templates/js/translated/order.js:2055
+#: templates/js/translated/order.js:2161
msgid "No matching line"
msgstr ""
-#: templates/js/translated/order.js:2096
+#: templates/js/translated/order.js:2202
msgid "No sales orders found"
msgstr ""
-#: templates/js/translated/order.js:2134
+#: templates/js/translated/order.js:2240
msgid "Invalid Customer"
msgstr ""
-#: templates/js/translated/order.js:2221
+#: templates/js/translated/order.js:2327
msgid "Edit shipment"
msgstr ""
-#: templates/js/translated/order.js:2224
+#: templates/js/translated/order.js:2330
msgid "Complete shipment"
msgstr ""
-#: templates/js/translated/order.js:2229
+#: templates/js/translated/order.js:2335
msgid "Delete shipment"
msgstr ""
-#: templates/js/translated/order.js:2249
+#: templates/js/translated/order.js:2355
msgid "Edit Shipment"
msgstr ""
-#: templates/js/translated/order.js:2266
+#: templates/js/translated/order.js:2372
msgid "Delete Shipment"
msgstr ""
-#: templates/js/translated/order.js:2300
+#: templates/js/translated/order.js:2406
msgid "No matching shipments found"
msgstr ""
-#: templates/js/translated/order.js:2310
+#: templates/js/translated/order.js:2416
msgid "Shipment Reference"
msgstr ""
-#: templates/js/translated/order.js:2334
+#: templates/js/translated/order.js:2440
msgid "Not shipped"
msgstr ""
-#: templates/js/translated/order.js:2340
+#: templates/js/translated/order.js:2446
msgid "Tracking"
msgstr ""
-#: templates/js/translated/order.js:2499
+#: templates/js/translated/order.js:2603
+msgid "Add Shipment"
+msgstr ""
+
+#: templates/js/translated/order.js:2654
msgid "Confirm stock allocation"
msgstr "Stok tahsisini onayla"
-#: templates/js/translated/order.js:2500
+#: templates/js/translated/order.js:2655
msgid "Allocate Stock Items to Sales Order"
msgstr ""
-#: templates/js/translated/order.js:2708
+#: templates/js/translated/order.js:2863
msgid "No sales order allocations found"
msgstr ""
-#: templates/js/translated/order.js:2789
+#: templates/js/translated/order.js:2944
msgid "Edit Stock Allocation"
msgstr ""
-#: templates/js/translated/order.js:2806
+#: templates/js/translated/order.js:2961
msgid "Confirm Delete Operation"
msgstr "Silme İşlemini Onayla"
-#: templates/js/translated/order.js:2807
+#: templates/js/translated/order.js:2962
msgid "Delete Stock Allocation"
msgstr ""
-#: templates/js/translated/order.js:2850 templates/js/translated/order.js:2939
+#: templates/js/translated/order.js:3005 templates/js/translated/order.js:3094
#: templates/js/translated/stock.js:1545
msgid "Shipped to customer"
msgstr ""
-#: templates/js/translated/order.js:2858 templates/js/translated/order.js:2948
+#: templates/js/translated/order.js:3013 templates/js/translated/order.js:3103
msgid "Stock location not specified"
msgstr ""
-#: templates/js/translated/order.js:3230
+#: templates/js/translated/order.js:3385
msgid "Allocate serial numbers"
msgstr "Seri numaralarını tahsis et"
-#: templates/js/translated/order.js:3236
+#: templates/js/translated/order.js:3391
msgid "Purchase stock"
msgstr ""
-#: templates/js/translated/order.js:3243 templates/js/translated/order.js:3439
+#: templates/js/translated/order.js:3398 templates/js/translated/order.js:3596
msgid "Calculate price"
msgstr ""
-#: templates/js/translated/order.js:3255
+#: templates/js/translated/order.js:3410
msgid "Cannot be deleted as items have been shipped"
msgstr ""
-#: templates/js/translated/order.js:3258
+#: templates/js/translated/order.js:3413
msgid "Cannot be deleted as items have been allocated"
msgstr ""
-#: templates/js/translated/order.js:3340
+#: templates/js/translated/order.js:3495
msgid "Allocate Serial Numbers"
msgstr "Seri Numaralarını Tahsis Et"
-#: templates/js/translated/order.js:3447
+#: templates/js/translated/order.js:3604
msgid "Update Unit Price"
msgstr ""
-#: templates/js/translated/order.js:3461
+#: templates/js/translated/order.js:3618
msgid "No matching line items"
msgstr ""
-#: templates/js/translated/order.js:3697
+#: templates/js/translated/order.js:3854
msgid "No matching lines"
msgstr ""
@@ -9486,7 +9507,7 @@ msgstr ""
msgid "Add Stock"
msgstr ""
-#: templates/js/translated/stock.js:887 users/models.py:218
+#: templates/js/translated/stock.js:887 users/models.py:216
msgid "Add"
msgstr ""
@@ -10201,58 +10222,59 @@ msgstr "Evet"
msgid "No"
msgstr "Hayır"
-#: users/admin.py:62
+#: users/admin.py:61
msgid "Users"
msgstr "Kullanıcılar"
-#: users/admin.py:63
+#: users/admin.py:62
msgid "Select which users are assigned to this group"
msgstr "Bu gruba atanacak kullanıcıyı seçin"
-#: users/admin.py:185
+#: users/admin.py:184
msgid "The following users are members of multiple groups:"
msgstr "Aşağıdaki kullanıcılar birden çok grubun üyesi:"
-#: users/admin.py:208
+#: users/admin.py:207
msgid "Personal info"
msgstr "Kullanıcı bilgisi"
-#: users/admin.py:209
+#: users/admin.py:208
msgid "Permissions"
msgstr "Yetkiler"
-#: users/admin.py:212
+#: users/admin.py:211
msgid "Important dates"
msgstr "Önemli tarihler"
-#: users/models.py:205
+#: users/models.py:203
msgid "Permission set"
msgstr "İzinleri ayarla"
-#: users/models.py:213
+#: users/models.py:211
msgid "Group"
msgstr "Grup"
-#: users/models.py:216
+#: users/models.py:214
msgid "View"
msgstr "Görünüm"
-#: users/models.py:216
+#: users/models.py:214
msgid "Permission to view items"
msgstr "Parçayı görüntüleme izni"
-#: users/models.py:218
+#: users/models.py:216
msgid "Permission to add items"
msgstr "Parça ekleme izni"
-#: users/models.py:220
+#: users/models.py:218
msgid "Change"
msgstr "Değiştir"
-#: users/models.py:220
+#: users/models.py:218
msgid "Permissions to edit items"
msgstr "Parçaları düzenleme izni"
-#: users/models.py:222
+#: users/models.py:220
msgid "Permission to delete items"
msgstr "Parçaları silme izni"
+
diff --git a/InvenTree/locale/vi/LC_MESSAGES/django.po b/InvenTree/locale/vi/LC_MESSAGES/django.po
index 244e16955a..fcfa226098 100644
--- a/InvenTree/locale/vi/LC_MESSAGES/django.po
+++ b/InvenTree/locale/vi/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-05-20 10:47+0000\n"
-"PO-Revision-Date: 2022-05-21 01:06\n"
+"POT-Creation-Date: 2022-05-23 23:24+0000\n"
+"PO-Revision-Date: 2022-05-24 01:42\n"
"Last-Translator: \n"
"Language-Team: Vietnamese\n"
"Language: vi_VN\n"
@@ -17,20 +17,20 @@ msgstr ""
"X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 154\n"
-#: InvenTree/api.py:50
+#: InvenTree/api.py:49
msgid "API endpoint not found"
msgstr ""
-#: InvenTree/exceptions.py:47
+#: InvenTree/exceptions.py:46
msgid "Error details can be found in the admin panel"
msgstr ""
-#: InvenTree/fields.py:98
+#: InvenTree/fields.py:96
msgid "Enter date"
msgstr ""
#: InvenTree/forms.py:124 templates/account/email_confirm.html:20
-#: templates/js/translated/forms.js:615
+#: templates/js/translated/forms.js:620
msgid "Confirm"
msgstr ""
@@ -79,7 +79,7 @@ msgstr ""
msgid "Duplicate serial: {sn}"
msgstr ""
-#: InvenTree/helpers.py:456 order/models.py:311 order/models.py:465
+#: InvenTree/helpers.py:456 order/models.py:307 order/models.py:461
msgid "Invalid quantity provided"
msgstr ""
@@ -116,89 +116,89 @@ msgstr ""
msgid "Number of unique serial numbers ({s}) must match quantity ({q})"
msgstr ""
-#: InvenTree/models.py:183
+#: InvenTree/models.py:181
msgid "Missing file"
msgstr ""
-#: InvenTree/models.py:184
+#: InvenTree/models.py:182
msgid "Missing external link"
msgstr ""
-#: InvenTree/models.py:195 stock/models.py:2211
+#: InvenTree/models.py:193 stock/models.py:2202
#: templates/js/translated/attachment.js:119
msgid "Attachment"
msgstr ""
-#: InvenTree/models.py:196
+#: InvenTree/models.py:194
msgid "Select file to attach"
msgstr ""
-#: InvenTree/models.py:202 company/models.py:129 company/models.py:343
-#: company/models.py:575 order/models.py:136 part/models.py:867
+#: InvenTree/models.py:200 company/models.py:123 company/models.py:337
+#: company/models.py:569 order/models.py:132 part/models.py:855
#: report/templates/report/inventree_build_order_base.html:165
#: templates/js/translated/company.js:540
#: templates/js/translated/company.js:829 templates/js/translated/part.js:1441
msgid "Link"
msgstr ""
-#: InvenTree/models.py:203 build/models.py:330 part/models.py:868
-#: stock/models.py:674
+#: InvenTree/models.py:201 build/models.py:330 part/models.py:856
+#: stock/models.py:665
msgid "Link to external URL"
msgstr ""
-#: InvenTree/models.py:206 templates/js/translated/attachment.js:163
+#: InvenTree/models.py:204 templates/js/translated/attachment.js:163
msgid "Comment"
msgstr "Bình luận"
-#: InvenTree/models.py:206
+#: InvenTree/models.py:204
msgid "File comment"
msgstr ""
-#: InvenTree/models.py:212 InvenTree/models.py:213 common/models.py:1571
-#: common/models.py:1572 common/models.py:1806 common/models.py:1807
-#: common/models.py:2034 common/models.py:2035 part/models.py:2369
-#: part/models.py:2389 plugin/models.py:261 plugin/models.py:262
+#: InvenTree/models.py:210 InvenTree/models.py:211 common/models.py:1567
+#: common/models.py:1568 common/models.py:1802 common/models.py:1803
+#: common/models.py:2030 common/models.py:2031 part/models.py:2357
+#: part/models.py:2377 plugin/models.py:260 plugin/models.py:261
#: report/templates/report/inventree_test_report_base.html:96
#: templates/js/translated/stock.js:2518
msgid "User"
msgstr "Người dùng"
-#: InvenTree/models.py:216
+#: InvenTree/models.py:214
msgid "upload date"
msgstr "Ngày tải lên"
-#: InvenTree/models.py:239
+#: InvenTree/models.py:237
msgid "Filename must not be empty"
msgstr "Tên tập tin không được để trống"
-#: InvenTree/models.py:262
+#: InvenTree/models.py:260
msgid "Invalid attachment directory"
msgstr ""
-#: InvenTree/models.py:272
+#: InvenTree/models.py:270
#, python-brace-format
msgid "Filename contains illegal character '{c}'"
msgstr ""
-#: InvenTree/models.py:275
+#: InvenTree/models.py:273
msgid "Filename missing extension"
msgstr ""
-#: InvenTree/models.py:282
+#: InvenTree/models.py:280
msgid "Attachment with this filename already exists"
msgstr ""
-#: InvenTree/models.py:289
+#: InvenTree/models.py:287
msgid "Error renaming file"
msgstr ""
-#: InvenTree/models.py:324
+#: InvenTree/models.py:322
msgid "Invalid choice"
msgstr ""
-#: InvenTree/models.py:340 InvenTree/models.py:341 common/models.py:1792
-#: company/models.py:426 label/models.py:109 part/models.py:811
-#: part/models.py:2553 plugin/models.py:100 report/models.py:174
+#: InvenTree/models.py:338 InvenTree/models.py:339 common/models.py:1788
+#: company/models.py:420 label/models.py:104 part/models.py:799
+#: part/models.py:2541 plugin/models.py:99 report/models.py:169
#: templates/InvenTree/notifications/notifications.html:84
#: templates/InvenTree/settings/mixins/urls.html:13
#: templates/InvenTree/settings/plugin.html:49
@@ -211,23 +211,23 @@ msgstr ""
msgid "Name"
msgstr ""
-#: InvenTree/models.py:347 build/models.py:207
-#: build/templates/build/detail.html:24 company/models.py:349
-#: company/models.py:581 company/templates/company/company_base.html:71
+#: InvenTree/models.py:345 build/models.py:207
+#: build/templates/build/detail.html:24 company/models.py:343
+#: company/models.py:575 company/templates/company/company_base.html:71
#: company/templates/company/manufacturer_part.html:75
-#: company/templates/company/supplier_part.html:73 label/models.py:116
-#: order/models.py:134 part/models.py:834 part/templates/part/category.html:74
+#: company/templates/company/supplier_part.html:73 label/models.py:111
+#: order/models.py:130 part/models.py:822 part/templates/part/category.html:74
#: part/templates/part/part_base.html:167
-#: part/templates/part/set_category.html:14 report/models.py:187
-#: report/models.py:552 report/models.py:591
+#: part/templates/part/set_category.html:14 report/models.py:182
+#: report/models.py:547 report/models.py:586
#: report/templates/report/inventree_build_order_base.html:118
#: stock/templates/stock/location.html:103
#: templates/InvenTree/settings/plugin_settings.html:33
#: templates/js/translated/bom.js:553 templates/js/translated/bom.js:872
#: templates/js/translated/build.js:2408 templates/js/translated/company.js:345
#: templates/js/translated/company.js:551
-#: templates/js/translated/company.js:840 templates/js/translated/order.js:1456
-#: templates/js/translated/order.js:1664 templates/js/translated/order.js:2148
+#: templates/js/translated/company.js:840 templates/js/translated/order.js:1562
+#: templates/js/translated/order.js:1770 templates/js/translated/order.js:2254
#: templates/js/translated/part.js:674 templates/js/translated/part.js:1082
#: templates/js/translated/part.js:1355 templates/js/translated/part.js:1755
#: templates/js/translated/part.js:1824 templates/js/translated/stock.js:1686
@@ -235,173 +235,173 @@ msgstr ""
msgid "Description"
msgstr "Mô tả"
-#: InvenTree/models.py:348
+#: InvenTree/models.py:346
msgid "Description (optional)"
msgstr "Mô tả (tùy chọn)"
-#: InvenTree/models.py:356
+#: InvenTree/models.py:354
msgid "parent"
msgstr ""
-#: InvenTree/serializers.py:62 part/models.py:2886
+#: InvenTree/serializers.py:59 part/models.py:2874
msgid "Must be a valid number"
msgstr ""
-#: InvenTree/serializers.py:296
+#: InvenTree/serializers.py:293
msgid "Filename"
msgstr "Tên tập tin"
-#: InvenTree/serializers.py:331
+#: InvenTree/serializers.py:328
msgid "Invalid value"
msgstr ""
-#: InvenTree/serializers.py:352
+#: InvenTree/serializers.py:349
msgid "Data File"
msgstr ""
-#: InvenTree/serializers.py:353
+#: InvenTree/serializers.py:350
msgid "Select data file for upload"
msgstr ""
-#: InvenTree/serializers.py:377
+#: InvenTree/serializers.py:374
msgid "Unsupported file type"
msgstr ""
-#: InvenTree/serializers.py:383
+#: InvenTree/serializers.py:380
msgid "File is too large"
msgstr ""
-#: InvenTree/serializers.py:404
+#: InvenTree/serializers.py:401
msgid "No columns found in file"
msgstr ""
-#: InvenTree/serializers.py:407
+#: InvenTree/serializers.py:404
msgid "No data rows found in file"
msgstr ""
-#: InvenTree/serializers.py:533
+#: InvenTree/serializers.py:530
msgid "No data rows provided"
msgstr ""
-#: InvenTree/serializers.py:536
+#: InvenTree/serializers.py:533
msgid "No data columns supplied"
msgstr ""
-#: InvenTree/serializers.py:623
+#: InvenTree/serializers.py:620
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr ""
-#: InvenTree/serializers.py:632
+#: InvenTree/serializers.py:629
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr ""
-#: InvenTree/settings.py:672
+#: InvenTree/settings.py:669
msgid "Czech"
msgstr ""
-#: InvenTree/settings.py:673
+#: InvenTree/settings.py:670
msgid "German"
msgstr ""
-#: InvenTree/settings.py:674
+#: InvenTree/settings.py:671
msgid "Greek"
msgstr ""
-#: InvenTree/settings.py:675
+#: InvenTree/settings.py:672
msgid "English"
msgstr ""
-#: InvenTree/settings.py:676
+#: InvenTree/settings.py:673
msgid "Spanish"
msgstr ""
-#: InvenTree/settings.py:677
+#: InvenTree/settings.py:674
msgid "Spanish (Mexican)"
msgstr ""
-#: InvenTree/settings.py:678
+#: InvenTree/settings.py:675
msgid "Farsi / Persian"
msgstr ""
-#: InvenTree/settings.py:679
+#: InvenTree/settings.py:676
msgid "French"
msgstr ""
-#: InvenTree/settings.py:680
+#: InvenTree/settings.py:677
msgid "Hebrew"
msgstr ""
-#: InvenTree/settings.py:681
+#: InvenTree/settings.py:678
msgid "Hungarian"
msgstr ""
-#: InvenTree/settings.py:682
+#: InvenTree/settings.py:679
msgid "Italian"
msgstr ""
-#: InvenTree/settings.py:683
+#: InvenTree/settings.py:680
msgid "Japanese"
msgstr ""
-#: InvenTree/settings.py:684
+#: InvenTree/settings.py:681
msgid "Korean"
msgstr ""
-#: InvenTree/settings.py:685
+#: InvenTree/settings.py:682
msgid "Dutch"
msgstr ""
-#: InvenTree/settings.py:686
+#: InvenTree/settings.py:683
msgid "Norwegian"
msgstr ""
-#: InvenTree/settings.py:687
+#: InvenTree/settings.py:684
msgid "Polish"
msgstr ""
-#: InvenTree/settings.py:688
+#: InvenTree/settings.py:685
msgid "Portuguese"
msgstr ""
-#: InvenTree/settings.py:689
+#: InvenTree/settings.py:686
msgid "Portuguese (Brazilian)"
msgstr ""
-#: InvenTree/settings.py:690
+#: InvenTree/settings.py:687
msgid "Russian"
msgstr ""
-#: InvenTree/settings.py:691
+#: InvenTree/settings.py:688
msgid "Swedish"
msgstr ""
-#: InvenTree/settings.py:692
+#: InvenTree/settings.py:689
msgid "Thai"
msgstr ""
-#: InvenTree/settings.py:693
+#: InvenTree/settings.py:690
msgid "Turkish"
msgstr ""
-#: InvenTree/settings.py:694
+#: InvenTree/settings.py:691
msgid "Vietnamese"
msgstr ""
-#: InvenTree/settings.py:695
+#: InvenTree/settings.py:692
msgid "Chinese"
msgstr ""
-#: InvenTree/status.py:110
+#: InvenTree/status.py:108
msgid "Background worker check failed"
msgstr ""
-#: InvenTree/status.py:114
+#: InvenTree/status.py:112
msgid "Email backend not configured"
msgstr ""
-#: InvenTree/status.py:117
+#: InvenTree/status.py:115
msgid "InvenTree system health checks failed"
msgstr ""
@@ -416,7 +416,7 @@ msgstr ""
#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:326
#: order/templates/order/order_base.html:134
-#: order/templates/order/sales_order_base.html:132
+#: order/templates/order/sales_order_base.html:133
msgid "Complete"
msgstr ""
@@ -435,8 +435,8 @@ msgstr ""
msgid "Returned"
msgstr ""
-#: InvenTree/status_codes.py:143 order/models.py:1087
-#: templates/js/translated/order.js:2871 templates/js/translated/order.js:3188
+#: InvenTree/status_codes.py:143 order/models.py:1083
+#: templates/js/translated/order.js:3026 templates/js/translated/order.js:3343
msgid "Shipped"
msgstr ""
@@ -552,63 +552,63 @@ msgstr ""
msgid "Production"
msgstr ""
-#: InvenTree/validators.py:25
+#: InvenTree/validators.py:23
msgid "Not a valid currency code"
msgstr ""
-#: InvenTree/validators.py:53
+#: InvenTree/validators.py:51
msgid "Invalid character in part name"
msgstr ""
-#: InvenTree/validators.py:66
+#: InvenTree/validators.py:64
#, python-brace-format
msgid "IPN must match regex pattern {pat}"
msgstr ""
-#: InvenTree/validators.py:80 InvenTree/validators.py:94
-#: InvenTree/validators.py:108
+#: InvenTree/validators.py:78 InvenTree/validators.py:92
+#: InvenTree/validators.py:106
#, python-brace-format
msgid "Reference must match pattern {pattern}"
msgstr ""
-#: InvenTree/validators.py:116
+#: InvenTree/validators.py:114
#, python-brace-format
msgid "Illegal character in name ({x})"
msgstr ""
-#: InvenTree/validators.py:137 InvenTree/validators.py:153
+#: InvenTree/validators.py:135 InvenTree/validators.py:151
msgid "Overage value must not be negative"
msgstr ""
-#: InvenTree/validators.py:155
+#: InvenTree/validators.py:153
msgid "Overage must not exceed 100%"
msgstr ""
-#: InvenTree/validators.py:162
+#: InvenTree/validators.py:160
msgid "Invalid value for overage"
msgstr ""
-#: InvenTree/views.py:535
+#: InvenTree/views.py:534
msgid "Delete Item"
msgstr ""
-#: InvenTree/views.py:584
+#: InvenTree/views.py:583
msgid "Check box to confirm item deletion"
msgstr ""
-#: InvenTree/views.py:599 templates/InvenTree/settings/user.html:22
+#: InvenTree/views.py:598 templates/InvenTree/settings/user.html:22
msgid "Edit User Information"
msgstr ""
-#: InvenTree/views.py:610 templates/InvenTree/settings/user.html:19
+#: InvenTree/views.py:609 templates/InvenTree/settings/user.html:19
msgid "Set Password"
msgstr ""
-#: InvenTree/views.py:629
+#: InvenTree/views.py:628
msgid "Password fields must match"
msgstr ""
-#: InvenTree/views.py:876 templates/navbar.html:152
+#: InvenTree/views.py:875 templates/navbar.html:152
msgid "System Information"
msgstr "Thông tin hệ thống"
@@ -629,7 +629,7 @@ msgstr "Tạo đơn hàng"
#: order/templates/order/so_sidebar.html:13
#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221
#: templates/InvenTree/search.html:139
-#: templates/InvenTree/settings/sidebar.html:45 users/models.py:44
+#: templates/InvenTree/settings/sidebar.html:45 users/models.py:42
msgid "Build Orders"
msgstr "Tạo đơn hàng"
@@ -637,15 +637,15 @@ msgstr "Tạo đơn hàng"
msgid "Build Order Reference"
msgstr ""
-#: build/models.py:199 order/models.py:241 order/models.py:593
-#: order/models.py:888 part/models.py:2797
+#: build/models.py:199 order/models.py:237 order/models.py:589
+#: order/models.py:884 part/models.py:2785
#: part/templates/part/upload_bom.html:54
#: report/templates/report/inventree_po_report.html:91
#: report/templates/report/inventree_so_report.html:92
#: templates/js/translated/bom.js:688 templates/js/translated/bom.js:879
-#: templates/js/translated/build.js:1794 templates/js/translated/order.js:1695
-#: templates/js/translated/order.js:1896 templates/js/translated/order.js:3055
-#: templates/js/translated/order.js:3538
+#: templates/js/translated/build.js:1794 templates/js/translated/order.js:1801
+#: templates/js/translated/order.js:2002 templates/js/translated/order.js:3210
+#: templates/js/translated/order.js:3695
msgid "Reference"
msgstr ""
@@ -663,12 +663,12 @@ msgid "BuildOrder to which this build is allocated"
msgstr ""
#: build/models.py:225 build/templates/build/build_base.html:77
-#: build/templates/build/detail.html:29 company/models.py:717
-#: order/models.py:987 order/models.py:1076 part/models.py:366
-#: part/models.py:2315 part/models.py:2331 part/models.py:2350
-#: part/models.py:2367 part/models.py:2469 part/models.py:2591
-#: part/models.py:2681 part/models.py:2772 part/models.py:3062
-#: part/serializers.py:922 part/templates/part/part_app_base.html:8
+#: build/templates/build/detail.html:29 company/models.py:711
+#: order/models.py:983 order/models.py:1072 part/models.py:354
+#: part/models.py:2303 part/models.py:2319 part/models.py:2338
+#: part/models.py:2355 part/models.py:2457 part/models.py:2579
+#: part/models.py:2669 part/models.py:2760 part/models.py:3050
+#: part/serializers.py:917 part/templates/part/part_app_base.html:8
#: part/templates/part/part_pricing.html:12
#: part/templates/part/set_category.html:13
#: part/templates/part/upload_bom.html:52
@@ -683,10 +683,10 @@ msgstr ""
#: templates/js/translated/build.js:1158 templates/js/translated/build.js:1664
#: templates/js/translated/build.js:2100 templates/js/translated/build.js:2413
#: templates/js/translated/company.js:492
-#: templates/js/translated/company.js:749 templates/js/translated/order.js:93
-#: templates/js/translated/order.js:762 templates/js/translated/order.js:1194
-#: templates/js/translated/order.js:1649 templates/js/translated/order.js:2475
-#: templates/js/translated/order.js:2824 templates/js/translated/order.js:3039
+#: templates/js/translated/company.js:749 templates/js/translated/order.js:94
+#: templates/js/translated/order.js:868 templates/js/translated/order.js:1300
+#: templates/js/translated/order.js:1755 templates/js/translated/order.js:2581
+#: templates/js/translated/order.js:2979 templates/js/translated/order.js:3194
#: templates/js/translated/part.js:1067 templates/js/translated/part.js:1137
#: templates/js/translated/part.js:1333 templates/js/translated/stock.js:531
#: templates/js/translated/stock.js:696 templates/js/translated/stock.js:903
@@ -708,7 +708,7 @@ msgid "SalesOrder to which this build is allocated"
msgstr ""
#: build/models.py:247 build/serializers.py:790
-#: templates/js/translated/build.js:2088 templates/js/translated/order.js:2463
+#: templates/js/translated/build.js:2088 templates/js/translated/order.js:2569
msgid "Source Location"
msgstr ""
@@ -748,8 +748,8 @@ msgstr ""
msgid "Build status code"
msgstr ""
-#: build/models.py:285 build/serializers.py:220 order/serializers.py:445
-#: stock/models.py:678 templates/js/translated/order.js:1054
+#: build/models.py:285 build/serializers.py:220 order/serializers.py:440
+#: stock/models.py:669 templates/js/translated/order.js:1160
msgid "Batch Code"
msgstr ""
@@ -757,12 +757,12 @@ msgstr ""
msgid "Batch code for this build output"
msgstr ""
-#: build/models.py:292 order/models.py:138 part/models.py:1006
-#: part/templates/part/part_base.html:305 templates/js/translated/order.js:2161
+#: build/models.py:292 order/models.py:134 part/models.py:994
+#: part/templates/part/part_base.html:305 templates/js/translated/order.js:2267
msgid "Creation Date"
msgstr ""
-#: build/models.py:296 order/models.py:615
+#: build/models.py:296 order/models.py:611
msgid "Target completion date"
msgstr ""
@@ -770,7 +770,7 @@ msgstr ""
msgid "Target date for build completion. Build will be overdue after this date."
msgstr ""
-#: build/models.py:300 order/models.py:284
+#: build/models.py:300 order/models.py:280
#: templates/js/translated/build.js:2490
msgid "Completion Date"
msgstr "Ngày hoàn thành"
@@ -788,11 +788,11 @@ msgid "User who issued this build order"
msgstr ""
#: build/models.py:323 build/templates/build/build_base.html:190
-#: build/templates/build/detail.html:115 order/models.py:152
+#: build/templates/build/detail.html:115 order/models.py:148
#: order/templates/order/order_base.html:176
-#: order/templates/order/sales_order_base.html:182 part/models.py:1010
+#: order/templates/order/sales_order_base.html:183 part/models.py:998
#: report/templates/report/inventree_build_order_base.html:159
-#: templates/js/translated/build.js:2470 templates/js/translated/order.js:1490
+#: templates/js/translated/build.js:2470 templates/js/translated/order.js:1596
msgid "Responsible"
msgstr ""
@@ -803,27 +803,27 @@ msgstr ""
#: build/models.py:329 build/templates/build/detail.html:101
#: company/templates/company/manufacturer_part.html:107
#: company/templates/company/supplier_part.html:132
-#: part/templates/part/part_base.html:346 stock/models.py:672
+#: part/templates/part/part_base.html:346 stock/models.py:663
#: stock/templates/stock/item_base.html:363
msgid "External Link"
msgstr ""
#: build/models.py:334 build/serializers.py:390
-#: build/templates/build/sidebar.html:21 company/models.py:140
-#: company/models.py:588 company/templates/company/sidebar.html:25
-#: order/models.py:156 order/models.py:890 order/models.py:1197
+#: build/templates/build/sidebar.html:21 company/models.py:134
+#: company/models.py:582 company/templates/company/sidebar.html:25
+#: order/models.py:152 order/models.py:886 order/models.py:1193
#: order/templates/order/po_sidebar.html:11
-#: order/templates/order/so_sidebar.html:17 part/models.py:995
+#: order/templates/order/so_sidebar.html:17 part/models.py:983
#: part/templates/part/part_sidebar.html:59
#: report/templates/report/inventree_build_order_base.html:173
-#: stock/models.py:745 stock/models.py:2111 stock/models.py:2217
-#: stock/serializers.py:329 stock/serializers.py:467 stock/serializers.py:736
-#: stock/serializers.py:834 stock/serializers.py:966
+#: stock/models.py:736 stock/models.py:2102 stock/models.py:2208
+#: stock/serializers.py:321 stock/serializers.py:459 stock/serializers.py:728
+#: stock/serializers.py:826 stock/serializers.py:958
#: stock/templates/stock/stock_sidebar.html:25
#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1065
-#: templates/js/translated/company.js:845 templates/js/translated/order.js:1816
-#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2344
-#: templates/js/translated/order.js:3213 templates/js/translated/order.js:3609
+#: templates/js/translated/company.js:845 templates/js/translated/order.js:1922
+#: templates/js/translated/order.js:2073 templates/js/translated/order.js:2450
+#: templates/js/translated/order.js:3368 templates/js/translated/order.js:3766
#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1922
msgid "Notes"
msgstr ""
@@ -857,7 +857,7 @@ msgstr ""
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:1238 order/models.py:1324
+#: build/models.py:1238 order/models.py:1329
msgid "Allocation quantity must be greater than zero"
msgstr ""
@@ -879,16 +879,16 @@ msgstr ""
msgid "Build to allocate parts"
msgstr ""
-#: build/models.py:1392 build/serializers.py:631 order/serializers.py:958
-#: order/serializers.py:976 stock/serializers.py:401 stock/serializers.py:674
-#: stock/serializers.py:792 stock/templates/stock/item_base.html:10
+#: build/models.py:1392 build/serializers.py:631 order/serializers.py:961
+#: order/serializers.py:979 stock/serializers.py:393 stock/serializers.py:666
+#: stock/serializers.py:784 stock/templates/stock/item_base.html:10
#: stock/templates/stock/item_base.html:23
#: stock/templates/stock/item_base.html:357
#: templates/js/translated/build.js:738 templates/js/translated/build.js:743
#: templates/js/translated/build.js:2102 templates/js/translated/build.js:2538
-#: templates/js/translated/order.js:94 templates/js/translated/order.js:2476
-#: templates/js/translated/order.js:2731 templates/js/translated/order.js:2736
-#: templates/js/translated/order.js:2831 templates/js/translated/order.js:2921
+#: templates/js/translated/order.js:95 templates/js/translated/order.js:2582
+#: templates/js/translated/order.js:2886 templates/js/translated/order.js:2891
+#: templates/js/translated/order.js:2986 templates/js/translated/order.js:3076
#: templates/js/translated/stock.js:532 templates/js/translated/stock.js:697
#: templates/js/translated/stock.js:2454
msgid "Stock Item"
@@ -900,11 +900,11 @@ msgstr ""
#: build/models.py:1405 build/serializers.py:190
#: build/templates/build/build_base.html:82
-#: build/templates/build/detail.html:34 common/models.py:1614
-#: company/forms.py:39 company/templates/company/supplier_part.html:258
-#: order/models.py:881 order/models.py:1364 order/serializers.py:1097
-#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:123
-#: part/forms.py:139 part/forms.py:155 part/models.py:2788
+#: build/templates/build/detail.html:34 common/models.py:1610
+#: company/forms.py:38 company/templates/company/supplier_part.html:258
+#: order/models.py:877 order/models.py:1369 order/serializers.py:1100
+#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:121
+#: part/forms.py:137 part/forms.py:153 part/models.py:2776
#: part/templates/part/detail.html:953 part/templates/part/detail.html:1039
#: part/templates/part/part_pricing.html:16
#: part/templates/part/upload_bom.html:53
@@ -913,7 +913,7 @@ msgstr ""
#: report/templates/report/inventree_so_report.html:91
#: report/templates/report/inventree_test_report_base.html:81
#: report/templates/report/inventree_test_report_base.html:139
-#: stock/serializers.py:290 stock/templates/stock/item_base.html:187
+#: stock/serializers.py:282 stock/templates/stock/item_base.html:187
#: stock/templates/stock/item_base.html:252
#: stock/templates/stock/item_base.html:260
#: templates/js/translated/barcode.js:437 templates/js/translated/bom.js:689
@@ -922,11 +922,11 @@ msgstr ""
#: templates/js/translated/build.js:1180 templates/js/translated/build.js:1690
#: templates/js/translated/build.js:2103
#: templates/js/translated/model_renderers.js:108
-#: templates/js/translated/order.js:110 templates/js/translated/order.js:765
-#: templates/js/translated/order.js:1701 templates/js/translated/order.js:1902
-#: templates/js/translated/order.js:2477 templates/js/translated/order.js:2750
-#: templates/js/translated/order.js:2838 templates/js/translated/order.js:2927
-#: templates/js/translated/order.js:3061 templates/js/translated/order.js:3544
+#: templates/js/translated/order.js:111 templates/js/translated/order.js:871
+#: templates/js/translated/order.js:1807 templates/js/translated/order.js:2008
+#: templates/js/translated/order.js:2583 templates/js/translated/order.js:2905
+#: templates/js/translated/order.js:2993 templates/js/translated/order.js:3082
+#: templates/js/translated/order.js:3216 templates/js/translated/order.js:3701
#: templates/js/translated/part.js:967 templates/js/translated/part.js:1969
#: templates/js/translated/part.js:2200 templates/js/translated/part.js:2234
#: templates/js/translated/part.js:2312 templates/js/translated/stock.js:403
@@ -972,10 +972,10 @@ msgstr ""
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:203 build/serializers.py:651 order/models.py:309
-#: order/serializers.py:294 order/serializers.py:440 part/serializers.py:593
-#: part/serializers.py:1089 stock/models.py:505 stock/models.py:1316
-#: stock/serializers.py:302
+#: build/serializers.py:203 build/serializers.py:651 order/models.py:305
+#: order/serializers.py:289 order/serializers.py:435 part/serializers.py:588
+#: part/serializers.py:1084 stock/models.py:496 stock/models.py:1307
+#: stock/serializers.py:294
msgid "Quantity must be greater than zero"
msgstr ""
@@ -987,8 +987,8 @@ msgstr ""
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:227 order/serializers.py:453 order/serializers.py:1101
-#: stock/serializers.py:311 templates/js/translated/order.js:1065
+#: build/serializers.py:227 order/serializers.py:448 order/serializers.py:1104
+#: stock/serializers.py:303 templates/js/translated/order.js:1171
#: templates/js/translated/stock.js:238 templates/js/translated/stock.js:404
msgid "Serial Numbers"
msgstr ""
@@ -1005,7 +1005,7 @@ msgstr ""
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:276 stock/api.py:602
+#: build/serializers.py:276 stock/api.py:590
msgid "The following serial numbers already exist"
msgstr ""
@@ -1013,14 +1013,14 @@ msgstr ""
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:372 order/serializers.py:426 order/serializers.py:531
-#: stock/serializers.py:322 stock/serializers.py:462 stock/serializers.py:827
-#: stock/serializers.py:1068 stock/templates/stock/item_base.html:303
+#: build/serializers.py:372 order/serializers.py:421 order/serializers.py:526
+#: stock/serializers.py:314 stock/serializers.py:454 stock/serializers.py:819
+#: stock/serializers.py:1060 stock/templates/stock/item_base.html:303
#: templates/js/translated/barcode.js:436
#: templates/js/translated/barcode.js:618 templates/js/translated/build.js:750
-#: templates/js/translated/build.js:1702 templates/js/translated/order.js:1092
-#: templates/js/translated/order.js:2743 templates/js/translated/order.js:2846
-#: templates/js/translated/order.js:2854 templates/js/translated/order.js:2935
+#: templates/js/translated/build.js:1702 templates/js/translated/order.js:1198
+#: templates/js/translated/order.js:2898 templates/js/translated/order.js:3001
+#: templates/js/translated/order.js:3009 templates/js/translated/order.js:3090
#: templates/js/translated/part.js:180 templates/js/translated/stock.js:533
#: templates/js/translated/stock.js:698 templates/js/translated/stock.js:905
#: templates/js/translated/stock.js:1793 templates/js/translated/stock.js:2395
@@ -1032,11 +1032,11 @@ msgid "Location for completed build outputs"
msgstr ""
#: build/serializers.py:379 build/templates/build/build_base.html:142
-#: build/templates/build/detail.html:62 order/models.py:609
-#: order/serializers.py:463 stock/templates/stock/item_base.html:193
+#: build/templates/build/detail.html:62 order/models.py:605
+#: order/serializers.py:458 stock/templates/stock/item_base.html:193
#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2442
-#: templates/js/translated/order.js:1199 templates/js/translated/order.js:1460
-#: templates/js/translated/order.js:2153 templates/js/translated/stock.js:1768
+#: templates/js/translated/order.js:1305 templates/js/translated/order.js:1566
+#: templates/js/translated/order.js:2259 templates/js/translated/stock.js:1768
#: templates/js/translated/stock.js:2472 templates/js/translated/stock.js:2604
msgid "Status"
msgstr "Trạng thái"
@@ -1097,8 +1097,8 @@ msgstr ""
msgid "No build outputs have been created for this build order"
msgstr ""
-#: build/serializers.py:556 build/serializers.py:605 part/models.py:2912
-#: part/models.py:3054
+#: build/serializers.py:556 build/serializers.py:605 part/models.py:2900
+#: part/models.py:3042
msgid "BOM Item"
msgstr ""
@@ -1114,11 +1114,11 @@ msgstr ""
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:637 stock/serializers.py:681
+#: build/serializers.py:637 stock/serializers.py:673
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:694 order/serializers.py:1009
+#: build/serializers.py:694 order/serializers.py:1012
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
@@ -1135,7 +1135,7 @@ msgstr ""
msgid "This stock item has already been allocated to this build output"
msgstr ""
-#: build/serializers.py:739 order/serializers.py:1271
+#: build/serializers.py:739 order/serializers.py:1274
msgid "Allocation items must be provided"
msgstr ""
@@ -1233,13 +1233,13 @@ msgid "Stock has not been fully allocated to this Build Order"
msgstr ""
#: build/templates/build/build_base.html:151
-#: build/templates/build/detail.html:131 order/models.py:894
+#: build/templates/build/detail.html:131 order/models.py:890
#: order/templates/order/order_base.html:162
-#: order/templates/order/sales_order_base.html:163
+#: order/templates/order/sales_order_base.html:164
#: report/templates/report/inventree_build_order_base.html:126
-#: templates/js/translated/build.js:2482 templates/js/translated/order.js:1477
-#: templates/js/translated/order.js:1763 templates/js/translated/order.js:2169
-#: templates/js/translated/order.js:3124 templates/js/translated/part.js:971
+#: templates/js/translated/build.js:2482 templates/js/translated/order.js:1583
+#: templates/js/translated/order.js:1869 templates/js/translated/order.js:2275
+#: templates/js/translated/order.js:3279 templates/js/translated/part.js:971
msgid "Target Date"
msgstr ""
@@ -1251,7 +1251,7 @@ msgstr ""
#: build/templates/build/build_base.html:156
#: build/templates/build/build_base.html:201
#: order/templates/order/order_base.html:98
-#: order/templates/order/sales_order_base.html:93
+#: order/templates/order/sales_order_base.html:94
#: templates/js/translated/table_filters.js:312
#: templates/js/translated/table_filters.js:353
#: templates/js/translated/table_filters.js:383
@@ -1260,20 +1260,20 @@ msgstr ""
#: build/templates/build/build_base.html:163
#: build/templates/build/detail.html:67 build/templates/build/detail.html:142
-#: order/templates/order/sales_order_base.html:170
+#: order/templates/order/sales_order_base.html:171
#: templates/js/translated/table_filters.js:392
msgid "Completed"
msgstr "Đã hoàn thành"
#: build/templates/build/build_base.html:176
-#: build/templates/build/detail.html:94 order/models.py:1073
-#: order/models.py:1169 order/models.py:1268
+#: build/templates/build/detail.html:94 order/models.py:1069
+#: order/models.py:1165 order/models.py:1273
#: order/templates/order/sales_order_base.html:9
#: order/templates/order/sales_order_base.html:28
#: report/templates/report/inventree_build_order_base.html:136
#: report/templates/report/inventree_so_report.html:77
#: stock/templates/stock/item_base.html:297
-#: templates/js/translated/order.js:2108
+#: templates/js/translated/order.js:2214
msgid "Sales Order"
msgstr ""
@@ -1308,8 +1308,8 @@ msgstr ""
msgid "Stock can be taken from any available location."
msgstr ""
-#: build/templates/build/detail.html:49 order/models.py:1009
-#: templates/js/translated/order.js:1200 templates/js/translated/order.js:1805
+#: build/templates/build/detail.html:49 order/models.py:1005
+#: templates/js/translated/order.js:1306 templates/js/translated/order.js:1911
msgid "Destination"
msgstr ""
@@ -1334,7 +1334,7 @@ msgstr ""
#: build/templates/build/detail.html:126
#: order/templates/order/order_base.html:149
-#: order/templates/order/sales_order_base.html:157
+#: order/templates/order/sales_order_base.html:158
#: templates/js/translated/build.js:2450
msgid "Created"
msgstr ""
@@ -1386,7 +1386,7 @@ msgstr ""
#: build/templates/build/detail.html:187
#: company/templates/company/detail.html:37
#: company/templates/company/detail.html:84
-#: part/templates/part/category.html:177 templates/js/translated/order.js:805
+#: part/templates/part/category.html:177 templates/js/translated/order.js:911
msgid "Order Parts"
msgstr ""
@@ -1516,23 +1516,23 @@ msgstr ""
msgid "Delete Build Order"
msgstr ""
-#: common/files.py:65
+#: common/files.py:66
msgid "Unsupported file format: {ext.upper()}"
msgstr ""
-#: common/files.py:67
+#: common/files.py:68
msgid "Error reading file (invalid encoding)"
msgstr ""
-#: common/files.py:72
+#: common/files.py:73
msgid "Error reading file (invalid format)"
msgstr ""
-#: common/files.py:74
+#: common/files.py:75
msgid "Error reading file (incorrect dimension)"
msgstr ""
-#: common/files.py:76
+#: common/files.py:77
msgid "Error reading file (data could be corrupted)"
msgstr ""
@@ -1553,888 +1553,888 @@ msgstr ""
msgid "Select {name} file to upload"
msgstr ""
-#: common/models.py:398
+#: common/models.py:394
msgid "Settings key (must be unique - case insensitive)"
msgstr ""
-#: common/models.py:400
+#: common/models.py:396
msgid "Settings value"
msgstr ""
-#: common/models.py:441
+#: common/models.py:437
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:461
+#: common/models.py:457
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:472
+#: common/models.py:468
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:521
+#: common/models.py:517
msgid "Key string must be unique"
msgstr ""
-#: common/models.py:743
+#: common/models.py:739
msgid "No group"
msgstr ""
-#: common/models.py:785
+#: common/models.py:781
msgid "Restart required"
msgstr ""
-#: common/models.py:786
+#: common/models.py:782
msgid "A setting has been changed which requires a server restart"
msgstr ""
-#: common/models.py:793
+#: common/models.py:789
msgid "Server Instance Name"
msgstr ""
-#: common/models.py:795
+#: common/models.py:791
msgid "String descriptor for the server instance"
msgstr ""
-#: common/models.py:799
+#: common/models.py:795
msgid "Use instance name"
msgstr ""
-#: common/models.py:800
+#: common/models.py:796
msgid "Use the instance name in the title-bar"
msgstr ""
-#: common/models.py:806
+#: common/models.py:802
msgid "Restrict showing `about`"
msgstr ""
-#: common/models.py:807
+#: common/models.py:803
msgid "Show the `about` modal only to superusers"
msgstr ""
-#: common/models.py:813 company/models.py:98 company/models.py:99
+#: common/models.py:809 company/models.py:92 company/models.py:93
msgid "Company name"
msgstr ""
-#: common/models.py:814
+#: common/models.py:810
msgid "Internal company name"
msgstr ""
-#: common/models.py:819
+#: common/models.py:815
msgid "Base URL"
msgstr ""
-#: common/models.py:820
+#: common/models.py:816
msgid "Base URL for server instance"
msgstr ""
-#: common/models.py:826
+#: common/models.py:822
msgid "Default Currency"
msgstr ""
-#: common/models.py:827
+#: common/models.py:823
msgid "Default currency"
msgstr ""
-#: common/models.py:833
+#: common/models.py:829
msgid "Download from URL"
msgstr ""
-#: common/models.py:834
+#: common/models.py:830
msgid "Allow download of remote images and files from external URL"
msgstr ""
-#: common/models.py:840 templates/InvenTree/settings/sidebar.html:33
+#: common/models.py:836 templates/InvenTree/settings/sidebar.html:33
msgid "Barcode Support"
msgstr ""
-#: common/models.py:841
+#: common/models.py:837
msgid "Enable barcode scanner support"
msgstr ""
-#: common/models.py:847
+#: common/models.py:843
msgid "Barcode Webcam Support"
msgstr ""
-#: common/models.py:848
+#: common/models.py:844
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/models.py:854
+#: common/models.py:850
msgid "IPN Regex"
msgstr ""
-#: common/models.py:855
+#: common/models.py:851
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/models.py:859
+#: common/models.py:855
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/models.py:860
+#: common/models.py:856
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/models.py:866
+#: common/models.py:862
msgid "Allow Editing IPN"
msgstr ""
-#: common/models.py:867
+#: common/models.py:863
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/models.py:873
+#: common/models.py:869
msgid "Copy Part BOM Data"
msgstr ""
-#: common/models.py:874
+#: common/models.py:870
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/models.py:880
+#: common/models.py:876
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/models.py:881
+#: common/models.py:877
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/models.py:887
+#: common/models.py:883
msgid "Copy Part Test Data"
msgstr ""
-#: common/models.py:888
+#: common/models.py:884
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/models.py:894
+#: common/models.py:890
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/models.py:895
+#: common/models.py:891
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/models.py:901 part/models.py:2593 report/models.py:180
+#: common/models.py:897 part/models.py:2581 report/models.py:175
#: templates/js/translated/table_filters.js:38
#: templates/js/translated/table_filters.js:444
msgid "Template"
msgstr ""
-#: common/models.py:902
+#: common/models.py:898
msgid "Parts are templates by default"
msgstr ""
-#: common/models.py:908 part/models.py:958 templates/js/translated/bom.js:1411
+#: common/models.py:904 part/models.py:946 templates/js/translated/bom.js:1411
#: templates/js/translated/table_filters.js:168
#: templates/js/translated/table_filters.js:460
msgid "Assembly"
msgstr ""
-#: common/models.py:909
+#: common/models.py:905
msgid "Parts can be assembled from other components by default"
msgstr ""
-#: common/models.py:915 part/models.py:964
+#: common/models.py:911 part/models.py:952
#: templates/js/translated/table_filters.js:464
msgid "Component"
msgstr ""
-#: common/models.py:916
+#: common/models.py:912
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/models.py:922 part/models.py:975
+#: common/models.py:918 part/models.py:963
msgid "Purchaseable"
msgstr ""
-#: common/models.py:923
+#: common/models.py:919
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/models.py:929 part/models.py:980
+#: common/models.py:925 part/models.py:968
#: templates/js/translated/table_filters.js:472
msgid "Salable"
msgstr ""
-#: common/models.py:930
+#: common/models.py:926
msgid "Parts are salable by default"
msgstr ""
-#: common/models.py:936 part/models.py:970
+#: common/models.py:932 part/models.py:958
#: templates/js/translated/table_filters.js:46
#: templates/js/translated/table_filters.js:100
#: templates/js/translated/table_filters.js:476
msgid "Trackable"
msgstr ""
-#: common/models.py:937
+#: common/models.py:933
msgid "Parts are trackable by default"
msgstr ""
-#: common/models.py:943 part/models.py:990
+#: common/models.py:939 part/models.py:978
#: part/templates/part/part_base.html:151
#: templates/js/translated/table_filters.js:42
msgid "Virtual"
msgstr ""
-#: common/models.py:944
+#: common/models.py:940
msgid "Parts are virtual by default"
msgstr ""
-#: common/models.py:950
+#: common/models.py:946
msgid "Show Import in Views"
msgstr ""
-#: common/models.py:951
+#: common/models.py:947
msgid "Display the import wizard in some part views"
msgstr ""
-#: common/models.py:957
+#: common/models.py:953
msgid "Show Price in Forms"
msgstr ""
-#: common/models.py:958
+#: common/models.py:954
msgid "Display part price in some forms"
msgstr ""
-#: common/models.py:969
+#: common/models.py:965
msgid "Show Price in BOM"
msgstr ""
-#: common/models.py:970
+#: common/models.py:966
msgid "Include pricing information in BOM tables"
msgstr ""
-#: common/models.py:981
+#: common/models.py:977
msgid "Show Price History"
msgstr ""
-#: common/models.py:982
+#: common/models.py:978
msgid "Display historical pricing for Part"
msgstr ""
-#: common/models.py:988
+#: common/models.py:984
msgid "Show related parts"
msgstr ""
-#: common/models.py:989
+#: common/models.py:985
msgid "Display related parts for a part"
msgstr ""
-#: common/models.py:995
+#: common/models.py:991
msgid "Create initial stock"
msgstr ""
-#: common/models.py:996
+#: common/models.py:992
msgid "Create initial stock on part creation"
msgstr ""
-#: common/models.py:1002
+#: common/models.py:998
msgid "Internal Prices"
msgstr ""
-#: common/models.py:1003
+#: common/models.py:999
msgid "Enable internal prices for parts"
msgstr ""
-#: common/models.py:1009
+#: common/models.py:1005
msgid "Internal Price as BOM-Price"
msgstr ""
-#: common/models.py:1010
+#: common/models.py:1006
msgid "Use the internal price (if set) in BOM-price calculations"
msgstr ""
-#: common/models.py:1016
+#: common/models.py:1012
msgid "Part Name Display Format"
msgstr ""
-#: common/models.py:1017
+#: common/models.py:1013
msgid "Format to display the part name"
msgstr ""
-#: common/models.py:1024
+#: common/models.py:1020
msgid "Enable Reports"
msgstr ""
-#: common/models.py:1025
+#: common/models.py:1021
msgid "Enable generation of reports"
msgstr ""
-#: common/models.py:1031 templates/stats.html:25
+#: common/models.py:1027 templates/stats.html:25
msgid "Debug Mode"
msgstr ""
-#: common/models.py:1032
+#: common/models.py:1028
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/models.py:1038
+#: common/models.py:1034
msgid "Page Size"
msgstr ""
-#: common/models.py:1039
+#: common/models.py:1035
msgid "Default page size for PDF reports"
msgstr ""
-#: common/models.py:1049
+#: common/models.py:1045
msgid "Test Reports"
msgstr ""
-#: common/models.py:1050
+#: common/models.py:1046
msgid "Enable generation of test reports"
msgstr ""
-#: common/models.py:1056
+#: common/models.py:1052
msgid "Batch Code Template"
msgstr ""
-#: common/models.py:1057
+#: common/models.py:1053
msgid "Template for generating default batch codes for stock items"
msgstr ""
-#: common/models.py:1062
+#: common/models.py:1058
msgid "Stock Expiry"
msgstr ""
-#: common/models.py:1063
+#: common/models.py:1059
msgid "Enable stock expiry functionality"
msgstr ""
-#: common/models.py:1069
+#: common/models.py:1065
msgid "Sell Expired Stock"
msgstr ""
-#: common/models.py:1070
+#: common/models.py:1066
msgid "Allow sale of expired stock"
msgstr ""
-#: common/models.py:1076
+#: common/models.py:1072
msgid "Stock Stale Time"
msgstr ""
-#: common/models.py:1077
+#: common/models.py:1073
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/models.py:1079
+#: common/models.py:1075
msgid "days"
msgstr ""
-#: common/models.py:1084
+#: common/models.py:1080
msgid "Build Expired Stock"
msgstr ""
-#: common/models.py:1085
+#: common/models.py:1081
msgid "Allow building with expired stock"
msgstr ""
-#: common/models.py:1091
+#: common/models.py:1087
msgid "Stock Ownership Control"
msgstr ""
-#: common/models.py:1092
+#: common/models.py:1088
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/models.py:1098
+#: common/models.py:1094
msgid "Build Order Reference Prefix"
msgstr ""
-#: common/models.py:1099
+#: common/models.py:1095
msgid "Prefix value for build order reference"
msgstr ""
-#: common/models.py:1104
+#: common/models.py:1100
msgid "Build Order Reference Regex"
msgstr ""
-#: common/models.py:1105
+#: common/models.py:1101
msgid "Regular expression pattern for matching build order reference"
msgstr ""
-#: common/models.py:1109
+#: common/models.py:1105
msgid "Sales Order Reference Prefix"
msgstr ""
-#: common/models.py:1110
+#: common/models.py:1106
msgid "Prefix value for sales order reference"
msgstr ""
-#: common/models.py:1115
+#: common/models.py:1111
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/models.py:1116
+#: common/models.py:1112
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/models.py:1122
+#: common/models.py:1118
msgid "Purchase Order Reference Prefix"
msgstr ""
-#: common/models.py:1123
+#: common/models.py:1119
msgid "Prefix value for purchase order reference"
msgstr ""
-#: common/models.py:1129
+#: common/models.py:1125
msgid "Enable password forgot"
msgstr ""
-#: common/models.py:1130
+#: common/models.py:1126
msgid "Enable password forgot function on the login pages"
msgstr ""
-#: common/models.py:1136
+#: common/models.py:1132
msgid "Enable registration"
msgstr ""
-#: common/models.py:1137
+#: common/models.py:1133
msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/models.py:1143
+#: common/models.py:1139
msgid "Enable SSO"
msgstr ""
-#: common/models.py:1144
+#: common/models.py:1140
msgid "Enable SSO on the login pages"
msgstr ""
-#: common/models.py:1150
+#: common/models.py:1146
msgid "Email required"
msgstr ""
-#: common/models.py:1151
+#: common/models.py:1147
msgid "Require user to supply mail on signup"
msgstr ""
-#: common/models.py:1157
+#: common/models.py:1153
msgid "Auto-fill SSO users"
msgstr ""
-#: common/models.py:1158
+#: common/models.py:1154
msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
-#: common/models.py:1164
+#: common/models.py:1160
msgid "Mail twice"
msgstr ""
-#: common/models.py:1165
+#: common/models.py:1161
msgid "On signup ask users twice for their mail"
msgstr ""
-#: common/models.py:1171
+#: common/models.py:1167
msgid "Password twice"
msgstr ""
-#: common/models.py:1172
+#: common/models.py:1168
msgid "On signup ask users twice for their password"
msgstr ""
-#: common/models.py:1178
+#: common/models.py:1174
msgid "Group on signup"
msgstr ""
-#: common/models.py:1179
+#: common/models.py:1175
msgid "Group to which new users are assigned on registration"
msgstr ""
-#: common/models.py:1185
+#: common/models.py:1181
msgid "Enforce MFA"
msgstr ""
-#: common/models.py:1186
+#: common/models.py:1182
msgid "Users must use multifactor security."
msgstr ""
-#: common/models.py:1192
+#: common/models.py:1188
msgid "Check plugins on startup"
msgstr ""
-#: common/models.py:1193
+#: common/models.py:1189
msgid "Check that all plugins are installed on startup - enable in container enviroments"
msgstr ""
-#: common/models.py:1201
+#: common/models.py:1197
msgid "Enable URL integration"
msgstr ""
-#: common/models.py:1202
+#: common/models.py:1198
msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/models.py:1209
+#: common/models.py:1205
msgid "Enable navigation integration"
msgstr ""
-#: common/models.py:1210
+#: common/models.py:1206
msgid "Enable plugins to integrate into navigation"
msgstr ""
-#: common/models.py:1217
+#: common/models.py:1213
msgid "Enable app integration"
msgstr ""
-#: common/models.py:1218
+#: common/models.py:1214
msgid "Enable plugins to add apps"
msgstr ""
-#: common/models.py:1225
+#: common/models.py:1221
msgid "Enable schedule integration"
msgstr ""
-#: common/models.py:1226
+#: common/models.py:1222
msgid "Enable plugins to run scheduled tasks"
msgstr ""
-#: common/models.py:1233
+#: common/models.py:1229
msgid "Enable event integration"
msgstr ""
-#: common/models.py:1234
+#: common/models.py:1230
msgid "Enable plugins to respond to internal events"
msgstr ""
-#: common/models.py:1249 common/models.py:1564
+#: common/models.py:1245 common/models.py:1560
msgid "Settings key (must be unique - case insensitive"
msgstr ""
-#: common/models.py:1280
+#: common/models.py:1276
msgid "Show subscribed parts"
msgstr ""
-#: common/models.py:1281
+#: common/models.py:1277
msgid "Show subscribed parts on the homepage"
msgstr ""
-#: common/models.py:1287
+#: common/models.py:1283
msgid "Show subscribed categories"
msgstr ""
-#: common/models.py:1288
+#: common/models.py:1284
msgid "Show subscribed part categories on the homepage"
msgstr ""
-#: common/models.py:1294
+#: common/models.py:1290
msgid "Show latest parts"
msgstr "Hiển thị nguyên liệu mới nhất"
-#: common/models.py:1295
+#: common/models.py:1291
msgid "Show latest parts on the homepage"
msgstr "Hiển thị nguyên liệu mới nhất trên trang chủ"
-#: common/models.py:1301
+#: common/models.py:1297
msgid "Recent Part Count"
msgstr ""
-#: common/models.py:1302
+#: common/models.py:1298
msgid "Number of recent parts to display on index page"
msgstr ""
-#: common/models.py:1308
+#: common/models.py:1304
msgid "Show unvalidated BOMs"
msgstr ""
-#: common/models.py:1309
+#: common/models.py:1305
msgid "Show BOMs that await validation on the homepage"
msgstr ""
-#: common/models.py:1315
+#: common/models.py:1311
msgid "Show recent stock changes"
msgstr ""
-#: common/models.py:1316
+#: common/models.py:1312
msgid "Show recently changed stock items on the homepage"
msgstr ""
-#: common/models.py:1322
+#: common/models.py:1318
msgid "Recent Stock Count"
msgstr ""
-#: common/models.py:1323
+#: common/models.py:1319
msgid "Number of recent stock items to display on index page"
msgstr ""
-#: common/models.py:1329
+#: common/models.py:1325
msgid "Show low stock"
msgstr ""
-#: common/models.py:1330
+#: common/models.py:1326
msgid "Show low stock items on the homepage"
msgstr ""
-#: common/models.py:1336
+#: common/models.py:1332
msgid "Show depleted stock"
msgstr ""
-#: common/models.py:1337
+#: common/models.py:1333
msgid "Show depleted stock items on the homepage"
msgstr ""
-#: common/models.py:1343
+#: common/models.py:1339
msgid "Show needed stock"
msgstr ""
-#: common/models.py:1344
+#: common/models.py:1340
msgid "Show stock items needed for builds on the homepage"
msgstr ""
-#: common/models.py:1350
+#: common/models.py:1346
msgid "Show expired stock"
msgstr ""
-#: common/models.py:1351
+#: common/models.py:1347
msgid "Show expired stock items on the homepage"
msgstr ""
-#: common/models.py:1357
+#: common/models.py:1353
msgid "Show stale stock"
msgstr ""
-#: common/models.py:1358
+#: common/models.py:1354
msgid "Show stale stock items on the homepage"
msgstr ""
-#: common/models.py:1364
+#: common/models.py:1360
msgid "Show pending builds"
msgstr ""
-#: common/models.py:1365
+#: common/models.py:1361
msgid "Show pending builds on the homepage"
msgstr ""
-#: common/models.py:1371
+#: common/models.py:1367
msgid "Show overdue builds"
msgstr ""
-#: common/models.py:1372
+#: common/models.py:1368
msgid "Show overdue builds on the homepage"
msgstr ""
-#: common/models.py:1378
+#: common/models.py:1374
msgid "Show outstanding POs"
msgstr ""
-#: common/models.py:1379
+#: common/models.py:1375
msgid "Show outstanding POs on the homepage"
msgstr ""
-#: common/models.py:1385
+#: common/models.py:1381
msgid "Show overdue POs"
msgstr ""
-#: common/models.py:1386
+#: common/models.py:1382
msgid "Show overdue POs on the homepage"
msgstr ""
-#: common/models.py:1392
+#: common/models.py:1388
msgid "Show outstanding SOs"
msgstr ""
-#: common/models.py:1393
+#: common/models.py:1389
msgid "Show outstanding SOs on the homepage"
msgstr ""
-#: common/models.py:1399
+#: common/models.py:1395
msgid "Show overdue SOs"
msgstr ""
-#: common/models.py:1400
+#: common/models.py:1396
msgid "Show overdue SOs on the homepage"
msgstr ""
-#: common/models.py:1405
+#: common/models.py:1401
msgid "Enable label printing"
msgstr ""
-#: common/models.py:1406
+#: common/models.py:1402
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/models.py:1412
+#: common/models.py:1408
msgid "Inline label display"
msgstr ""
-#: common/models.py:1413
+#: common/models.py:1409
msgid "Display PDF labels in the browser, instead of downloading as a file"
msgstr ""
-#: common/models.py:1419
+#: common/models.py:1415
msgid "Inline report display"
msgstr ""
-#: common/models.py:1420
+#: common/models.py:1416
msgid "Display PDF reports in the browser, instead of downloading as a file"
msgstr ""
-#: common/models.py:1426
+#: common/models.py:1422
msgid "Search Parts"
msgstr ""
-#: common/models.py:1427
+#: common/models.py:1423
msgid "Display parts in search preview window"
msgstr ""
-#: common/models.py:1433
+#: common/models.py:1429
msgid "Hide Inactive Parts"
msgstr ""
-#: common/models.py:1434
+#: common/models.py:1430
msgid "Excluded inactive parts from search preview window"
msgstr ""
-#: common/models.py:1440
+#: common/models.py:1436
msgid "Search Categories"
msgstr ""
-#: common/models.py:1441
+#: common/models.py:1437
msgid "Display part categories in search preview window"
msgstr ""
-#: common/models.py:1447
+#: common/models.py:1443
msgid "Search Stock"
msgstr ""
-#: common/models.py:1448
+#: common/models.py:1444
msgid "Display stock items in search preview window"
msgstr ""
-#: common/models.py:1454
+#: common/models.py:1450
msgid "Hide Unavailable Stock Items"
msgstr ""
-#: common/models.py:1455
+#: common/models.py:1451
msgid "Exclude stock items which are not available from the search preview window"
msgstr ""
-#: common/models.py:1461
+#: common/models.py:1457
msgid "Search Locations"
msgstr ""
-#: common/models.py:1462
+#: common/models.py:1458
msgid "Display stock locations in search preview window"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1464
msgid "Search Companies"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1465
msgid "Display companies in search preview window"
msgstr ""
-#: common/models.py:1475
+#: common/models.py:1471
msgid "Search Purchase Orders"
msgstr ""
-#: common/models.py:1476
+#: common/models.py:1472
msgid "Display purchase orders in search preview window"
msgstr ""
-#: common/models.py:1482
+#: common/models.py:1478
msgid "Exclude Inactive Purchase Orders"
msgstr ""
-#: common/models.py:1483
+#: common/models.py:1479
msgid "Exclude inactive purchase orders from search preview window"
msgstr ""
-#: common/models.py:1489
+#: common/models.py:1485
msgid "Search Sales Orders"
msgstr ""
-#: common/models.py:1490
+#: common/models.py:1486
msgid "Display sales orders in search preview window"
msgstr ""
-#: common/models.py:1496
+#: common/models.py:1492
msgid "Exclude Inactive Sales Orders"
msgstr ""
-#: common/models.py:1497
+#: common/models.py:1493
msgid "Exclude inactive sales orders from search preview window"
msgstr ""
-#: common/models.py:1503
+#: common/models.py:1499
msgid "Search Preview Results"
msgstr ""
-#: common/models.py:1504
+#: common/models.py:1500
msgid "Number of results to show in each section of the search preview window"
msgstr ""
-#: common/models.py:1510
+#: common/models.py:1506
msgid "Show Quantity in Forms"
msgstr ""
-#: common/models.py:1511
+#: common/models.py:1507
msgid "Display available part quantity in some forms"
msgstr ""
-#: common/models.py:1517
+#: common/models.py:1513
msgid "Escape Key Closes Forms"
msgstr ""
-#: common/models.py:1518
+#: common/models.py:1514
msgid "Use the escape key to close modal forms"
msgstr ""
-#: common/models.py:1524
+#: common/models.py:1520
msgid "Fixed Navbar"
msgstr ""
-#: common/models.py:1525
+#: common/models.py:1521
msgid "The navbar position is fixed to the top of the screen"
msgstr ""
-#: common/models.py:1531
+#: common/models.py:1527
msgid "Date Format"
msgstr ""
-#: common/models.py:1532
+#: common/models.py:1528
msgid "Preferred format for displaying dates"
msgstr ""
-#: common/models.py:1546 part/templates/part/detail.html:39
+#: common/models.py:1542 part/templates/part/detail.html:39
msgid "Part Scheduling"
msgstr ""
-#: common/models.py:1547
+#: common/models.py:1543
msgid "Display part scheduling information"
msgstr ""
-#: common/models.py:1615 company/forms.py:40
+#: common/models.py:1611 company/forms.py:39
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1622 company/serializers.py:288
-#: company/templates/company/supplier_part.html:263 order/models.py:921
+#: common/models.py:1618 company/serializers.py:285
+#: company/templates/company/supplier_part.html:263 order/models.py:917
#: templates/js/translated/part.js:998 templates/js/translated/part.js:1974
msgid "Price"
msgstr ""
-#: common/models.py:1623
+#: common/models.py:1619
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1783 common/models.py:1920
+#: common/models.py:1779 common/models.py:1916
msgid "Endpoint"
msgstr ""
-#: common/models.py:1784
+#: common/models.py:1780
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1793
+#: common/models.py:1789
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1798 part/models.py:985 plugin/models.py:106
+#: common/models.py:1794 part/models.py:973 plugin/models.py:105
#: templates/js/translated/table_filters.js:34
#: templates/js/translated/table_filters.js:96
#: templates/js/translated/table_filters.js:308
@@ -2442,79 +2442,79 @@ msgstr ""
msgid "Active"
msgstr ""
-#: common/models.py:1799
+#: common/models.py:1795
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1813
+#: common/models.py:1809
msgid "Token"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1810
msgid "Token for access"
msgstr ""
-#: common/models.py:1821
+#: common/models.py:1817
msgid "Secret"
msgstr ""
-#: common/models.py:1822
+#: common/models.py:1818
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1887
+#: common/models.py:1883
msgid "Message ID"
msgstr ""
-#: common/models.py:1888
+#: common/models.py:1884
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1896
+#: common/models.py:1892
msgid "Host"
msgstr ""
-#: common/models.py:1897
+#: common/models.py:1893
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1904
+#: common/models.py:1900
msgid "Header"
msgstr ""
-#: common/models.py:1905
+#: common/models.py:1901
msgid "Header of this message"
msgstr ""
-#: common/models.py:1911
+#: common/models.py:1907
msgid "Body"
msgstr ""
-#: common/models.py:1912
+#: common/models.py:1908
msgid "Body of this message"
msgstr ""
-#: common/models.py:1921
+#: common/models.py:1917
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1926
+#: common/models.py:1922
msgid "Worked on"
msgstr ""
-#: common/models.py:1927
+#: common/models.py:1923
msgid "Was the work on this message finished?"
msgstr ""
#: common/views.py:90 order/templates/order/purchase_order_detail.html:23
-#: order/views.py:119 part/views.py:205
+#: order/views.py:115 part/views.py:194
#: templates/patterns/wizard/upload.html:37
msgid "Upload File"
msgstr ""
-#: common/views.py:91 order/views.py:120
+#: common/views.py:91 order/views.py:116
#: part/templates/part/import_wizard/ajax_match_fields.html:45
-#: part/views.py:206 templates/patterns/wizard/match_fields.html:51
+#: part/views.py:195 templates/patterns/wizard/match_fields.html:51
msgid "Match Fields"
msgstr ""
@@ -2537,118 +2537,118 @@ msgstr ""
msgid "Previous Step"
msgstr ""
-#: company/forms.py:21 part/forms.py:43
+#: company/forms.py:20 part/forms.py:41
#: templates/InvenTree/settings/mixins/urls.html:14
msgid "URL"
msgstr ""
-#: company/forms.py:22 part/forms.py:44
+#: company/forms.py:21 part/forms.py:42
msgid "Image URL"
msgstr ""
-#: company/models.py:103
+#: company/models.py:97
msgid "Company description"
msgstr ""
-#: company/models.py:104
+#: company/models.py:98
msgid "Description of the company"
msgstr ""
-#: company/models.py:110 company/templates/company/company_base.html:100
+#: company/models.py:104 company/templates/company/company_base.html:100
#: templates/InvenTree/settings/plugin_settings.html:55
#: templates/js/translated/company.js:349
msgid "Website"
msgstr ""
-#: company/models.py:111
+#: company/models.py:105
msgid "Company website URL"
msgstr ""
-#: company/models.py:115 company/templates/company/company_base.html:118
+#: company/models.py:109 company/templates/company/company_base.html:118
msgid "Address"
msgstr ""
-#: company/models.py:116
+#: company/models.py:110
msgid "Company address"
msgstr ""
-#: company/models.py:119
+#: company/models.py:113
msgid "Phone number"
msgstr ""
-#: company/models.py:120
+#: company/models.py:114
msgid "Contact phone number"
msgstr ""
-#: company/models.py:123 company/templates/company/company_base.html:132
+#: company/models.py:117 company/templates/company/company_base.html:132
#: templates/InvenTree/settings/user.html:48
msgid "Email"
msgstr ""
-#: company/models.py:123
+#: company/models.py:117
msgid "Contact email address"
msgstr ""
-#: company/models.py:126 company/templates/company/company_base.html:139
+#: company/models.py:120 company/templates/company/company_base.html:139
msgid "Contact"
msgstr ""
-#: company/models.py:127
+#: company/models.py:121
msgid "Point of contact"
msgstr ""
-#: company/models.py:129
+#: company/models.py:123
msgid "Link to external company information"
msgstr ""
-#: company/models.py:137 part/models.py:877
+#: company/models.py:131 part/models.py:865
msgid "Image"
msgstr ""
-#: company/models.py:142
+#: company/models.py:136
msgid "is customer"
msgstr ""
-#: company/models.py:142
+#: company/models.py:136
msgid "Do you sell items to this company?"
msgstr ""
-#: company/models.py:144
+#: company/models.py:138
msgid "is supplier"
msgstr ""
-#: company/models.py:144
+#: company/models.py:138
msgid "Do you purchase items from this company?"
msgstr ""
-#: company/models.py:146
+#: company/models.py:140
msgid "is manufacturer"
msgstr ""
-#: company/models.py:146
+#: company/models.py:140
msgid "Does this company manufacture parts?"
msgstr ""
-#: company/models.py:150 company/serializers.py:294
-#: company/templates/company/company_base.html:106 part/serializers.py:156
-#: part/serializers.py:188 stock/serializers.py:176
+#: company/models.py:144 company/serializers.py:291
+#: company/templates/company/company_base.html:106 part/serializers.py:151
+#: part/serializers.py:183 stock/serializers.py:168
msgid "Currency"
msgstr ""
-#: company/models.py:153
+#: company/models.py:147
msgid "Default currency used for this company"
msgstr ""
-#: company/models.py:315 company/models.py:546 stock/models.py:616
+#: company/models.py:309 company/models.py:540 stock/models.py:607
#: stock/templates/stock/item_base.html:148 templates/js/translated/bom.js:542
msgid "Base Part"
msgstr ""
-#: company/models.py:319 company/models.py:550
+#: company/models.py:313 company/models.py:544
msgid "Select part"
msgstr ""
-#: company/models.py:330 company/templates/company/company_base.html:76
+#: company/models.py:324 company/templates/company/company_base.html:76
#: company/templates/company/manufacturer_part.html:90
#: company/templates/company/supplier_part.html:103
#: stock/templates/stock/item_base.html:370
@@ -2659,146 +2659,146 @@ msgstr ""
msgid "Manufacturer"
msgstr "Nhà sản xuất"
-#: company/models.py:331 templates/js/translated/part.js:236
+#: company/models.py:325 templates/js/translated/part.js:236
msgid "Select manufacturer"
msgstr ""
-#: company/models.py:337 company/templates/company/manufacturer_part.html:101
+#: company/models.py:331 company/templates/company/manufacturer_part.html:101
#: company/templates/company/supplier_part.html:111
#: templates/js/translated/company.js:533
-#: templates/js/translated/company.js:818 templates/js/translated/order.js:1683
+#: templates/js/translated/company.js:818 templates/js/translated/order.js:1789
#: templates/js/translated/part.js:246 templates/js/translated/part.js:956
msgid "MPN"
msgstr ""
-#: company/models.py:338 templates/js/translated/part.js:247
+#: company/models.py:332 templates/js/translated/part.js:247
msgid "Manufacturer Part Number"
msgstr ""
-#: company/models.py:344
+#: company/models.py:338
msgid "URL for external manufacturer part link"
msgstr ""
-#: company/models.py:350
+#: company/models.py:344
msgid "Manufacturer part description"
msgstr ""
-#: company/models.py:397 company/models.py:420 company/models.py:569
+#: company/models.py:391 company/models.py:414 company/models.py:563
#: company/templates/company/manufacturer_part.html:7
#: company/templates/company/manufacturer_part.html:24
#: stock/templates/stock/item_base.html:380
msgid "Manufacturer Part"
msgstr ""
-#: company/models.py:427
+#: company/models.py:421
msgid "Parameter name"
msgstr ""
-#: company/models.py:433
+#: company/models.py:427
#: report/templates/report/inventree_test_report_base.html:95
-#: stock/models.py:2204 templates/js/translated/company.js:647
+#: stock/models.py:2195 templates/js/translated/company.js:647
#: templates/js/translated/part.js:776 templates/js/translated/stock.js:1304
msgid "Value"
msgstr ""
-#: company/models.py:434
+#: company/models.py:428
msgid "Parameter value"
msgstr ""
-#: company/models.py:440 part/models.py:952 part/models.py:2561
+#: company/models.py:434 part/models.py:940 part/models.py:2549
#: part/templates/part/part_base.html:280
#: templates/InvenTree/settings/settings.html:332
#: templates/js/translated/company.js:653 templates/js/translated/part.js:782
msgid "Units"
msgstr ""
-#: company/models.py:441
+#: company/models.py:435
msgid "Parameter units"
msgstr ""
-#: company/models.py:513
+#: company/models.py:507
msgid "Linked manufacturer part must reference the same base part"
msgstr ""
-#: company/models.py:556 company/templates/company/company_base.html:81
-#: company/templates/company/supplier_part.html:87 order/models.py:256
+#: company/models.py:550 company/templates/company/company_base.html:81
+#: company/templates/company/supplier_part.html:87 order/models.py:252
#: order/templates/order/order_base.html:112 part/bom.py:237 part/bom.py:265
#: stock/templates/stock/item_base.html:387
#: templates/js/translated/company.js:337
-#: templates/js/translated/company.js:774 templates/js/translated/order.js:1443
+#: templates/js/translated/company.js:774 templates/js/translated/order.js:1549
#: templates/js/translated/part.js:216 templates/js/translated/part.js:924
#: templates/js/translated/table_filters.js:415
msgid "Supplier"
msgstr "Nhà cung cấp"
-#: company/models.py:557 templates/js/translated/part.js:217
+#: company/models.py:551 templates/js/translated/part.js:217
msgid "Select supplier"
msgstr ""
-#: company/models.py:562 company/templates/company/supplier_part.html:97
-#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1670
+#: company/models.py:556 company/templates/company/supplier_part.html:97
+#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1776
#: templates/js/translated/part.js:227 templates/js/translated/part.js:942
msgid "SKU"
msgstr ""
-#: company/models.py:563 templates/js/translated/part.js:228
+#: company/models.py:557 templates/js/translated/part.js:228
msgid "Supplier stock keeping unit"
msgstr ""
-#: company/models.py:570
+#: company/models.py:564
msgid "Select manufacturer part"
msgstr ""
-#: company/models.py:576
+#: company/models.py:570
msgid "URL for external supplier part link"
msgstr ""
-#: company/models.py:582
+#: company/models.py:576
msgid "Supplier part description"
msgstr ""
-#: company/models.py:587 company/templates/company/supplier_part.html:125
-#: part/models.py:2800 part/templates/part/upload_bom.html:59
+#: company/models.py:581 company/templates/company/supplier_part.html:125
+#: part/models.py:2788 part/templates/part/upload_bom.html:59
#: report/templates/report/inventree_po_report.html:92
-#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:406
+#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:398
msgid "Note"
msgstr ""
-#: company/models.py:591 part/models.py:1870
+#: company/models.py:585 part/models.py:1858
msgid "base cost"
msgstr ""
-#: company/models.py:591 part/models.py:1870
+#: company/models.py:585 part/models.py:1858
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:593 company/templates/company/supplier_part.html:118
-#: stock/models.py:640 stock/templates/stock/item_base.html:328
+#: company/models.py:587 company/templates/company/supplier_part.html:118
+#: stock/models.py:631 stock/templates/stock/item_base.html:328
#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1918
msgid "Packaging"
msgstr ""
-#: company/models.py:593
+#: company/models.py:587
msgid "Part packaging"
msgstr ""
-#: company/models.py:595 part/models.py:1872
+#: company/models.py:589 part/models.py:1860
msgid "multiple"
msgstr ""
-#: company/models.py:595
+#: company/models.py:589
msgid "Order multiple"
msgstr ""
-#: company/models.py:719
+#: company/models.py:713
msgid "last updated"
msgstr ""
-#: company/serializers.py:71
+#: company/serializers.py:68
msgid "Default currency used for this supplier"
msgstr ""
-#: company/serializers.py:72
+#: company/serializers.py:69
msgid "Currency Code"
msgstr ""
@@ -2809,7 +2809,7 @@ msgid "Company"
msgstr ""
#: company/templates/company/company_base.html:22
-#: templates/js/translated/order.js:416
+#: templates/js/translated/order.js:522
msgid "Create Purchase Order"
msgstr ""
@@ -2845,11 +2845,11 @@ msgstr ""
msgid "Download image from URL"
msgstr ""
-#: company/templates/company/company_base.html:86 order/models.py:604
-#: order/templates/order/sales_order_base.html:115 stock/models.py:659
-#: stock/models.py:660 stock/serializers.py:722
+#: company/templates/company/company_base.html:86 order/models.py:600
+#: order/templates/order/sales_order_base.html:116 stock/models.py:650
+#: stock/models.py:651 stock/serializers.py:714
#: stock/templates/stock/item_base.html:280
-#: templates/js/translated/company.js:329 templates/js/translated/order.js:2130
+#: templates/js/translated/company.js:329 templates/js/translated/order.js:2236
#: templates/js/translated/stock.js:2436
#: templates/js/translated/table_filters.js:419
msgid "Customer"
@@ -2935,7 +2935,7 @@ msgstr ""
#: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197
#: templates/InvenTree/settings/sidebar.html:47
#: templates/js/translated/search.js:190 templates/navbar.html:50
-#: users/models.py:45
+#: users/models.py:43
msgid "Purchase Orders"
msgstr ""
@@ -2958,7 +2958,7 @@ msgstr ""
#: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217
#: templates/InvenTree/settings/sidebar.html:49
#: templates/js/translated/search.js:214 templates/navbar.html:61
-#: users/models.py:46
+#: users/models.py:44
msgid "Sales Orders"
msgstr ""
@@ -2997,7 +2997,7 @@ msgstr ""
msgid "Supplier List"
msgstr ""
-#: company/templates/company/manufacturer_part.html:15 company/views.py:52
+#: company/templates/company/manufacturer_part.html:15 company/views.py:47
#: part/templates/part/prices.html:170 templates/InvenTree/search.html:178
#: templates/navbar.html:49
msgid "Manufacturers"
@@ -3030,7 +3030,7 @@ msgid "No manufacturer information available"
msgstr ""
#: company/templates/company/manufacturer_part.html:119
-#: company/templates/company/supplier_part.html:15 company/views.py:46
+#: company/templates/company/supplier_part.html:15 company/views.py:41
#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:166
#: templates/InvenTree/search.html:188 templates/navbar.html:48
msgid "Suppliers"
@@ -3046,7 +3046,7 @@ msgstr ""
#: company/templates/company/manufacturer_part.html:303
#: part/templates/part/detail.html:363 part/templates/part/detail.html:392
#: templates/js/translated/bom.js:699 templates/js/translated/company.js:426
-#: templates/js/translated/helpers.js:32 users/models.py:222
+#: templates/js/translated/helpers.js:32 users/models.py:220
msgid "Delete"
msgstr ""
@@ -3098,9 +3098,9 @@ msgid "Assigned Stock Items"
msgstr ""
#: company/templates/company/supplier_part.html:7
-#: company/templates/company/supplier_part.html:24 stock/models.py:624
+#: company/templates/company/supplier_part.html:24 stock/models.py:615
#: stock/templates/stock/item_base.html:396
-#: templates/js/translated/company.js:790 templates/js/translated/order.js:763
+#: templates/js/translated/company.js:790 templates/js/translated/order.js:869
#: templates/js/translated/stock.js:1875
msgid "Supplier Part"
msgstr ""
@@ -3217,536 +3217,532 @@ msgstr ""
#: stock/templates/stock/location.html:173
#: stock/templates/stock/location_sidebar.html:7
#: templates/InvenTree/search.html:152 templates/js/translated/search.js:138
-#: templates/js/translated/stock.js:2312 users/models.py:43
+#: templates/js/translated/stock.js:2312 users/models.py:41
msgid "Stock Items"
msgstr ""
-#: company/views.py:47
+#: company/views.py:42
msgid "New Supplier"
msgstr ""
-#: company/views.py:53
+#: company/views.py:48
msgid "New Manufacturer"
msgstr ""
-#: company/views.py:58 templates/InvenTree/search.html:208
+#: company/views.py:53 templates/InvenTree/search.html:208
#: templates/navbar.html:60
msgid "Customers"
msgstr ""
-#: company/views.py:59
+#: company/views.py:54
msgid "New Customer"
msgstr ""
-#: company/views.py:66 templates/js/translated/search.js:167
+#: company/views.py:61 templates/js/translated/search.js:167
msgid "Companies"
msgstr ""
-#: company/views.py:67
+#: company/views.py:62
msgid "New Company"
msgstr ""
-#: company/views.py:126 part/views.py:590
+#: company/views.py:121 part/views.py:579
msgid "Download Image"
msgstr ""
-#: company/views.py:155 part/views.py:622
+#: company/views.py:150 part/views.py:611
msgid "Image size exceeds maximum allowable size for download"
msgstr ""
-#: company/views.py:162 part/views.py:629
+#: company/views.py:157 part/views.py:618
#, python-brace-format
msgid "Invalid response: {code}"
msgstr ""
-#: company/views.py:171 part/views.py:638
+#: company/views.py:166 part/views.py:627
msgid "Supplied URL is not a valid image file"
msgstr ""
-#: label/api.py:94 report/api.py:201
-msgid "No valid objects provided to template"
-msgstr ""
-
-#: label/models.py:110
+#: label/models.py:105
msgid "Label name"
msgstr ""
-#: label/models.py:117
+#: label/models.py:112
msgid "Label description"
msgstr ""
-#: label/models.py:124
+#: label/models.py:119
msgid "Label"
msgstr ""
-#: label/models.py:125
+#: label/models.py:120
msgid "Label template file"
msgstr ""
-#: label/models.py:131 report/models.py:291
+#: label/models.py:126 report/models.py:286
msgid "Enabled"
msgstr ""
-#: label/models.py:132
+#: label/models.py:127
msgid "Label template is enabled"
msgstr ""
-#: label/models.py:137
+#: label/models.py:132
msgid "Width [mm]"
msgstr ""
-#: label/models.py:138
+#: label/models.py:133
msgid "Label width, specified in mm"
msgstr ""
-#: label/models.py:144
+#: label/models.py:139
msgid "Height [mm]"
msgstr ""
-#: label/models.py:145
+#: label/models.py:140
msgid "Label height, specified in mm"
msgstr ""
-#: label/models.py:151 report/models.py:284
+#: label/models.py:146 report/models.py:279
msgid "Filename Pattern"
msgstr ""
-#: label/models.py:152
+#: label/models.py:147
msgid "Pattern for generating label filenames"
msgstr ""
-#: label/models.py:255
+#: label/models.py:250
msgid "Query filters (comma-separated list of key=value pairs),"
msgstr ""
-#: label/models.py:256 label/models.py:316 label/models.py:363
-#: report/models.py:315 report/models.py:452 report/models.py:491
+#: label/models.py:251 label/models.py:295 label/models.py:327
+#: report/models.py:310 report/models.py:447 report/models.py:486
msgid "Filters"
msgstr ""
-#: label/models.py:315
+#: label/models.py:294
msgid "Query filters (comma-separated list of key=value pairs"
msgstr ""
-#: label/models.py:362
+#: label/models.py:326
msgid "Part query filters (comma-separated value of key=value pairs)"
msgstr ""
-#: order/models.py:134
+#: order/models.py:130
msgid "Order description"
msgstr ""
-#: order/models.py:136
+#: order/models.py:132
msgid "Link to external page"
msgstr ""
-#: order/models.py:144
+#: order/models.py:140
msgid "Created By"
msgstr ""
-#: order/models.py:151
+#: order/models.py:147
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:156
+#: order/models.py:152
msgid "Order notes"
msgstr ""
-#: order/models.py:242 order/models.py:594
+#: order/models.py:238 order/models.py:590
msgid "Order reference"
msgstr ""
-#: order/models.py:247 order/models.py:609
+#: order/models.py:243 order/models.py:605
msgid "Purchase order status"
msgstr ""
-#: order/models.py:257
+#: order/models.py:253
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:260 order/templates/order/order_base.html:124
-#: templates/js/translated/order.js:1452
+#: order/models.py:256 order/templates/order/order_base.html:124
+#: templates/js/translated/order.js:1558
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:260
+#: order/models.py:256
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:267
+#: order/models.py:263
msgid "received by"
msgstr ""
-#: order/models.py:272
+#: order/models.py:268
msgid "Issue Date"
msgstr ""
-#: order/models.py:273
+#: order/models.py:269
msgid "Date order was issued"
msgstr ""
-#: order/models.py:278
+#: order/models.py:274
msgid "Target Delivery Date"
msgstr ""
-#: order/models.py:279
+#: order/models.py:275
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:285
+#: order/models.py:281
msgid "Date order was completed"
msgstr ""
-#: order/models.py:314
+#: order/models.py:310
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:460
+#: order/models.py:456
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:605
+#: order/models.py:601
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:611
+#: order/models.py:607
msgid "Customer Reference "
msgstr ""
-#: order/models.py:611
+#: order/models.py:607
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:616
+#: order/models.py:612
msgid "Target date for order completion. Order will be overdue after this date."
msgstr ""
-#: order/models.py:619 order/models.py:1174
-#: templates/js/translated/order.js:2177 templates/js/translated/order.js:2328
+#: order/models.py:615 order/models.py:1170
+#: templates/js/translated/order.js:2283 templates/js/translated/order.js:2434
msgid "Shipment Date"
msgstr ""
-#: order/models.py:626
+#: order/models.py:622
msgid "shipped by"
msgstr ""
-#: order/models.py:692
+#: order/models.py:688
msgid "Order cannot be completed as no parts have been assigned"
msgstr ""
-#: order/models.py:696
+#: order/models.py:692
msgid "Only a pending order can be marked as complete"
msgstr ""
-#: order/models.py:699
+#: order/models.py:695
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:702
+#: order/models.py:698
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:882
+#: order/models.py:878
msgid "Item quantity"
msgstr ""
-#: order/models.py:888
+#: order/models.py:884
msgid "Line item reference"
msgstr ""
-#: order/models.py:890
+#: order/models.py:886
msgid "Line item notes"
msgstr ""
-#: order/models.py:895
+#: order/models.py:891
msgid "Target shipping date for this line item"
msgstr ""
-#: order/models.py:913
+#: order/models.py:909
msgid "Context"
msgstr ""
-#: order/models.py:914
+#: order/models.py:910
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:922
+#: order/models.py:918
msgid "Unit price"
msgstr ""
-#: order/models.py:955
+#: order/models.py:951
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:962
+#: order/models.py:958
msgid "deleted"
msgstr ""
-#: order/models.py:968 order/models.py:1050 order/models.py:1072
-#: order/models.py:1168 order/models.py:1268
-#: templates/js/translated/order.js:2719
+#: order/models.py:964 order/models.py:1046 order/models.py:1068
+#: order/models.py:1164 order/models.py:1273
+#: templates/js/translated/order.js:2874
msgid "Order"
msgstr ""
-#: order/models.py:969 order/models.py:1050
+#: order/models.py:965 order/models.py:1046
#: order/templates/order/order_base.html:9
#: order/templates/order/order_base.html:18
#: report/templates/report/inventree_po_report.html:76
#: stock/templates/stock/item_base.html:342
-#: templates/js/translated/order.js:764 templates/js/translated/order.js:1421
+#: templates/js/translated/order.js:870 templates/js/translated/order.js:1527
#: templates/js/translated/part.js:899 templates/js/translated/stock.js:1852
#: templates/js/translated/stock.js:2417
msgid "Purchase Order"
msgstr "Đơn hàng"
-#: order/models.py:988
+#: order/models.py:984
msgid "Supplier part"
msgstr ""
-#: order/models.py:995 order/templates/order/order_base.html:169
-#: templates/js/translated/order.js:1197 templates/js/translated/order.js:1785
+#: order/models.py:991 order/templates/order/order_base.html:169
+#: templates/js/translated/order.js:1303 templates/js/translated/order.js:1891
#: templates/js/translated/part.js:993 templates/js/translated/part.js:1020
#: templates/js/translated/table_filters.js:330
msgid "Received"
msgstr ""
-#: order/models.py:996
+#: order/models.py:992
msgid "Number of items received"
msgstr ""
-#: order/models.py:1003 part/templates/part/prices.html:179 stock/models.py:754
-#: stock/serializers.py:167 stock/templates/stock/item_base.html:349
+#: order/models.py:999 part/templates/part/prices.html:179 stock/models.py:745
+#: stock/serializers.py:159 stock/templates/stock/item_base.html:349
#: templates/js/translated/stock.js:1906
msgid "Purchase Price"
msgstr "Giá mua"
-#: order/models.py:1004
+#: order/models.py:1000
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:1012
+#: order/models.py:1008
msgid "Where does the Purchaser want this item to be stored?"
msgstr ""
-#: order/models.py:1082 part/templates/part/part_pricing.html:112
+#: order/models.py:1078 part/templates/part/part_pricing.html:112
#: part/templates/part/prices.html:119 part/templates/part/prices.html:288
msgid "Sale Price"
msgstr ""
-#: order/models.py:1083
+#: order/models.py:1079
msgid "Unit sale price"
msgstr ""
-#: order/models.py:1088
+#: order/models.py:1084
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:1175
+#: order/models.py:1171
msgid "Date of shipment"
msgstr ""
-#: order/models.py:1182
+#: order/models.py:1178
msgid "Checked By"
msgstr ""
-#: order/models.py:1183
+#: order/models.py:1179
msgid "User who checked this shipment"
msgstr ""
-#: order/models.py:1191
+#: order/models.py:1187
msgid "Shipment number"
msgstr ""
-#: order/models.py:1198
+#: order/models.py:1194
msgid "Shipment notes"
msgstr ""
-#: order/models.py:1205
+#: order/models.py:1201
msgid "Tracking Number"
msgstr ""
-#: order/models.py:1206
+#: order/models.py:1202
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:1216
+#: order/models.py:1213
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:1219
+#: order/models.py:1216
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:1306 order/models.py:1308
+#: order/models.py:1311 order/models.py:1313
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:1312
+#: order/models.py:1317
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:1314
+#: order/models.py:1319
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:1317
+#: order/models.py:1322
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:1321
+#: order/models.py:1326
msgid "StockItem is over-allocated"
msgstr ""
-#: order/models.py:1327 order/serializers.py:1002
+#: order/models.py:1332 order/serializers.py:1005
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:1330
+#: order/models.py:1335
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:1331
+#: order/models.py:1336
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:1339
+#: order/models.py:1344
msgid "Line"
msgstr ""
-#: order/models.py:1347 order/serializers.py:1112 order/serializers.py:1240
+#: order/models.py:1352 order/serializers.py:1115 order/serializers.py:1243
#: templates/js/translated/model_renderers.js:301
msgid "Shipment"
msgstr ""
-#: order/models.py:1348
+#: order/models.py:1353
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:1360 templates/InvenTree/notifications/notifications.html:70
+#: order/models.py:1365 templates/InvenTree/notifications/notifications.html:70
msgid "Item"
msgstr ""
-#: order/models.py:1361
+#: order/models.py:1366
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:1364
+#: order/models.py:1369
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/serializers.py:74
+#: order/serializers.py:69
msgid "Price currency"
msgstr ""
-#: order/serializers.py:203
+#: order/serializers.py:198
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:301
+#: order/serializers.py:296
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:325
+#: order/serializers.py:320
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:339
+#: order/serializers.py:334
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:344
+#: order/serializers.py:339
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:350
+#: order/serializers.py:345
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:351
+#: order/serializers.py:346
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:411 order/serializers.py:1077
+#: order/serializers.py:406 order/serializers.py:1080
msgid "Line Item"
msgstr ""
-#: order/serializers.py:417
+#: order/serializers.py:412
msgid "Line item does not match purchase order"
msgstr ""
-#: order/serializers.py:427 order/serializers.py:532
+#: order/serializers.py:422 order/serializers.py:527
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:446 templates/js/translated/order.js:1055
+#: order/serializers.py:441 templates/js/translated/order.js:1161
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:454 templates/js/translated/order.js:1066
+#: order/serializers.py:449 templates/js/translated/order.js:1172
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:467
+#: order/serializers.py:462
msgid "Barcode Hash"
msgstr ""
-#: order/serializers.py:468
+#: order/serializers.py:463
msgid "Unique identifier field"
msgstr ""
-#: order/serializers.py:485
+#: order/serializers.py:480
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:504
+#: order/serializers.py:499
msgid "An integer quantity must be provided for trackable parts"
msgstr ""
-#: order/serializers.py:544
+#: order/serializers.py:539
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:561
+#: order/serializers.py:556
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:572
+#: order/serializers.py:567
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:847
+#: order/serializers.py:842
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:917
+#: order/serializers.py:913
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:967 order/serializers.py:1089
+#: order/serializers.py:970 order/serializers.py:1092
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:989
+#: order/serializers.py:992
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1102
+#: order/serializers.py:1105
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1126 order/serializers.py:1251
+#: order/serializers.py:1129 order/serializers.py:1254
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1129 order/serializers.py:1254
+#: order/serializers.py:1132 order/serializers.py:1257
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1181
+#: order/serializers.py:1184
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1191
+#: order/serializers.py:1194
msgid "The following serial numbers are already allocated"
msgstr ""
@@ -3770,7 +3766,7 @@ msgid "Edit order"
msgstr ""
#: order/templates/order/order_base.html:47
-#: order/templates/order/sales_order_base.html:60
+#: order/templates/order/sales_order_base.html:61
msgid "Cancel order"
msgstr ""
@@ -3792,22 +3788,22 @@ msgid "Mark order as complete"
msgstr ""
#: order/templates/order/order_base.html:62
-#: order/templates/order/sales_order_base.html:67
+#: order/templates/order/sales_order_base.html:68
msgid "Complete Order"
msgstr ""
#: order/templates/order/order_base.html:84
-#: order/templates/order/sales_order_base.html:79
+#: order/templates/order/sales_order_base.html:80
msgid "Order Reference"
msgstr ""
#: order/templates/order/order_base.html:89
-#: order/templates/order/sales_order_base.html:84
+#: order/templates/order/sales_order_base.html:85
msgid "Order Description"
msgstr ""
#: order/templates/order/order_base.html:94
-#: order/templates/order/sales_order_base.html:89
+#: order/templates/order/sales_order_base.html:90
msgid "Order Status"
msgstr ""
@@ -3816,13 +3812,13 @@ msgid "No suppplier information available"
msgstr ""
#: order/templates/order/order_base.html:130
-#: order/templates/order/sales_order_base.html:128
+#: order/templates/order/sales_order_base.html:129
msgid "Completed Line Items"
msgstr ""
#: order/templates/order/order_base.html:136
-#: order/templates/order/sales_order_base.html:134
-#: order/templates/order/sales_order_base.html:144
+#: order/templates/order/sales_order_base.html:135
+#: order/templates/order/sales_order_base.html:145
msgid "Incomplete"
msgstr ""
@@ -3832,7 +3828,7 @@ msgid "Issued"
msgstr ""
#: order/templates/order/order_base.html:183
-#: order/templates/order/sales_order_base.html:189
+#: order/templates/order/sales_order_base.html:190
msgid "Total cost"
msgstr ""
@@ -3868,8 +3864,8 @@ msgstr ""
#: part/templates/part/import_wizard/match_references.html:49
#: templates/js/translated/bom.js:77 templates/js/translated/build.js:427
#: templates/js/translated/build.js:579 templates/js/translated/build.js:1989
-#: templates/js/translated/order.js:712 templates/js/translated/order.js:1144
-#: templates/js/translated/order.js:2387 templates/js/translated/stock.js:570
+#: templates/js/translated/order.js:818 templates/js/translated/order.js:1250
+#: templates/js/translated/order.js:2493 templates/js/translated/stock.js:570
#: templates/js/translated/stock.js:738
#: templates/patterns/wizard/match_fields.html:70
msgid "Remove row"
@@ -3920,7 +3916,7 @@ msgstr ""
#: order/templates/order/purchase_order_detail.html:53
#: order/templates/order/sales_order_detail.html:45
-#: order/templates/order/sales_order_detail.html:273
+#: order/templates/order/sales_order_detail.html:274
msgid "Add Extra Line"
msgstr ""
@@ -3950,27 +3946,32 @@ msgstr ""
msgid "Print packing list"
msgstr ""
-#: order/templates/order/sales_order_base.html:66
-#: order/templates/order/sales_order_base.html:239
+#: order/templates/order/sales_order_base.html:60
+#: templates/js/translated/order.js:211
+msgid "Complete Shipments"
+msgstr ""
+
+#: order/templates/order/sales_order_base.html:67
+#: order/templates/order/sales_order_base.html:250
msgid "Complete Sales Order"
msgstr ""
-#: order/templates/order/sales_order_base.html:102
+#: order/templates/order/sales_order_base.html:103
msgid "This Sales Order has not been fully allocated"
msgstr ""
-#: order/templates/order/sales_order_base.html:122
-#: templates/js/translated/order.js:2143
+#: order/templates/order/sales_order_base.html:123
+#: templates/js/translated/order.js:2249
msgid "Customer Reference"
msgstr ""
-#: order/templates/order/sales_order_base.html:140
+#: order/templates/order/sales_order_base.html:141
#: order/templates/order/sales_order_detail.html:100
#: order/templates/order/so_sidebar.html:11
msgid "Completed Shipments"
msgstr ""
-#: order/templates/order/sales_order_base.html:221
+#: order/templates/order/sales_order_base.html:222
msgid "Edit Sales Order"
msgstr ""
@@ -3992,73 +3993,73 @@ msgstr ""
msgid "New Shipment"
msgstr ""
-#: order/views.py:121
+#: order/views.py:117
msgid "Match Supplier Parts"
msgstr ""
-#: order/views.py:394
+#: order/views.py:390
msgid "Sales order not found"
msgstr ""
-#: order/views.py:400
+#: order/views.py:396
msgid "Price not found"
msgstr ""
-#: order/views.py:403
+#: order/views.py:399
#, python-brace-format
msgid "Updated {part} unit-price to {price}"
msgstr ""
-#: order/views.py:408
+#: order/views.py:404
#, python-brace-format
msgid "Updated {part} unit-price to {price} and quantity to {qty}"
msgstr ""
-#: part/api.py:516
+#: part/api.py:504
msgid "Incoming Purchase Order"
msgstr ""
-#: part/api.py:536
+#: part/api.py:524
msgid "Outgoing Sales Order"
msgstr ""
-#: part/api.py:554
+#: part/api.py:542
msgid "Stock produced by Build Order"
msgstr ""
-#: part/api.py:586
+#: part/api.py:574
msgid "Stock required for Build Order"
msgstr ""
-#: part/api.py:677
+#: part/api.py:665
msgid "Valid"
msgstr ""
-#: part/api.py:678
+#: part/api.py:666
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/api.py:683
+#: part/api.py:671
msgid "This option must be selected"
msgstr ""
-#: part/api.py:1055
+#: part/api.py:1043
msgid "Must be greater than zero"
msgstr ""
-#: part/api.py:1059
+#: part/api.py:1047
msgid "Must be a valid quantity"
msgstr ""
-#: part/api.py:1074
+#: part/api.py:1062
msgid "Specify location for initial part stock"
msgstr ""
-#: part/api.py:1105 part/api.py:1109 part/api.py:1124 part/api.py:1128
+#: part/api.py:1093 part/api.py:1097 part/api.py:1112 part/api.py:1116
msgid "This field is required"
msgstr ""
-#: part/bom.py:125 part/models.py:111 part/models.py:886
+#: part/bom.py:125 part/models.py:99 part/models.py:874
#: part/templates/part/category.html:108 part/templates/part/part_base.html:330
msgid "Default Location"
msgstr ""
@@ -4078,115 +4079,115 @@ msgstr ""
msgid "On Order"
msgstr ""
-#: part/forms.py:81
+#: part/forms.py:79
msgid "Select part category"
msgstr ""
-#: part/forms.py:100
+#: part/forms.py:98
msgid "Add parameter template to same level categories"
msgstr ""
-#: part/forms.py:104
+#: part/forms.py:102
msgid "Add parameter template to all categories"
msgstr ""
-#: part/forms.py:124
+#: part/forms.py:122
msgid "Input quantity for price calculation"
msgstr ""
-#: part/models.py:112
+#: part/models.py:100
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:115
+#: part/models.py:103
msgid "Default keywords"
msgstr ""
-#: part/models.py:115
+#: part/models.py:103
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:125 part/models.py:2637 part/templates/part/category.html:15
+#: part/models.py:113 part/models.py:2625 part/templates/part/category.html:15
#: part/templates/part/part_app_base.html:10
msgid "Part Category"
msgstr ""
-#: part/models.py:126 part/templates/part/category.html:128
+#: part/models.py:114 part/templates/part/category.html:128
#: templates/InvenTree/search.html:95 templates/js/translated/search.js:113
-#: users/models.py:40
+#: users/models.py:38
msgid "Part Categories"
msgstr ""
-#: part/models.py:367 part/templates/part/cat_link.html:3
+#: part/models.py:355 part/templates/part/cat_link.html:3
#: part/templates/part/category.html:17 part/templates/part/category.html:133
#: part/templates/part/category.html:153
#: part/templates/part/category_sidebar.html:9
#: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82
#: templates/InvenTree/settings/sidebar.html:39
#: templates/js/translated/part.js:1768 templates/js/translated/search.js:99
-#: templates/navbar.html:24 users/models.py:41
+#: templates/navbar.html:24 users/models.py:39
msgid "Parts"
msgstr "Nguyên liệu"
-#: part/models.py:459
+#: part/models.py:447
msgid "Invalid choice for parent part"
msgstr ""
-#: part/models.py:534 part/models.py:546
+#: part/models.py:522 part/models.py:534
#, python-brace-format
msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)"
msgstr ""
-#: part/models.py:676
+#: part/models.py:664
msgid "Next available serial numbers are"
msgstr ""
-#: part/models.py:680
+#: part/models.py:668
msgid "Next available serial number is"
msgstr ""
-#: part/models.py:685
+#: part/models.py:673
msgid "Most recent serial number is"
msgstr ""
-#: part/models.py:781
+#: part/models.py:769
msgid "Duplicate IPN not allowed in part settings"
msgstr ""
-#: part/models.py:810 part/models.py:2690
+#: part/models.py:798 part/models.py:2678
msgid "Part name"
msgstr ""
-#: part/models.py:817
+#: part/models.py:805
msgid "Is Template"
msgstr ""
-#: part/models.py:818
+#: part/models.py:806
msgid "Is this part a template part?"
msgstr ""
-#: part/models.py:828
+#: part/models.py:816
msgid "Is this part a variant of another part?"
msgstr ""
-#: part/models.py:829
+#: part/models.py:817
msgid "Variant Of"
msgstr ""
-#: part/models.py:835
+#: part/models.py:823
msgid "Part description"
msgstr ""
-#: part/models.py:840 part/templates/part/category.html:86
+#: part/models.py:828 part/templates/part/category.html:86
#: part/templates/part/part_base.html:294
msgid "Keywords"
msgstr ""
-#: part/models.py:841
+#: part/models.py:829
msgid "Part keywords to improve visibility in search results"
msgstr ""
-#: part/models.py:848 part/models.py:2387 part/models.py:2636
+#: part/models.py:836 part/models.py:2375 part/models.py:2624
#: part/templates/part/part_base.html:257
#: part/templates/part/set_category.html:15
#: templates/InvenTree/notifications/notifications.html:65
@@ -4195,432 +4196,432 @@ msgstr ""
msgid "Category"
msgstr ""
-#: part/models.py:849
+#: part/models.py:837
msgid "Part category"
msgstr ""
-#: part/models.py:854 part/templates/part/part_base.html:266
+#: part/models.py:842 part/templates/part/part_base.html:266
#: templates/js/translated/part.js:666 templates/js/translated/part.js:1322
#: templates/js/translated/stock.js:1669
msgid "IPN"
msgstr ""
-#: part/models.py:855
+#: part/models.py:843
msgid "Internal Part Number"
msgstr ""
-#: part/models.py:861
+#: part/models.py:849
msgid "Part revision or version number"
msgstr ""
-#: part/models.py:862 part/templates/part/part_base.html:273
-#: report/models.py:193 templates/js/translated/part.js:670
+#: part/models.py:850 part/templates/part/part_base.html:273
+#: report/models.py:188 templates/js/translated/part.js:670
msgid "Revision"
msgstr ""
-#: part/models.py:884
+#: part/models.py:872
msgid "Where is this item normally stored?"
msgstr ""
-#: part/models.py:931 part/templates/part/part_base.html:339
+#: part/models.py:919 part/templates/part/part_base.html:339
msgid "Default Supplier"
msgstr ""
-#: part/models.py:932
+#: part/models.py:920
msgid "Default supplier part"
msgstr ""
-#: part/models.py:939
+#: part/models.py:927
msgid "Default Expiry"
msgstr ""
-#: part/models.py:940
+#: part/models.py:928
msgid "Expiry time (in days) for stock items of this part"
msgstr ""
-#: part/models.py:945 part/templates/part/part_base.html:200
+#: part/models.py:933 part/templates/part/part_base.html:200
msgid "Minimum Stock"
msgstr ""
-#: part/models.py:946
+#: part/models.py:934
msgid "Minimum allowed stock level"
msgstr ""
-#: part/models.py:953
+#: part/models.py:941
msgid "Stock keeping units for this part"
msgstr ""
-#: part/models.py:959
+#: part/models.py:947
msgid "Can this part be built from other parts?"
msgstr ""
-#: part/models.py:965
+#: part/models.py:953
msgid "Can this part be used to build other parts?"
msgstr ""
-#: part/models.py:971
+#: part/models.py:959
msgid "Does this part have tracking for unique items?"
msgstr ""
-#: part/models.py:976
+#: part/models.py:964
msgid "Can this part be purchased from external suppliers?"
msgstr ""
-#: part/models.py:981
+#: part/models.py:969
msgid "Can this part be sold to customers?"
msgstr ""
-#: part/models.py:986
+#: part/models.py:974
msgid "Is this part active?"
msgstr ""
-#: part/models.py:991
+#: part/models.py:979
msgid "Is this a virtual part, such as a software product or license?"
msgstr ""
-#: part/models.py:996
+#: part/models.py:984
msgid "Part notes - supports Markdown formatting"
msgstr ""
-#: part/models.py:999
+#: part/models.py:987
msgid "BOM checksum"
msgstr ""
-#: part/models.py:999
+#: part/models.py:987
msgid "Stored BOM checksum"
msgstr ""
-#: part/models.py:1002
+#: part/models.py:990
msgid "BOM checked by"
msgstr ""
-#: part/models.py:1004
+#: part/models.py:992
msgid "BOM checked date"
msgstr ""
-#: part/models.py:1008
+#: part/models.py:996
msgid "Creation User"
msgstr ""
-#: part/models.py:1872
+#: part/models.py:1860
msgid "Sell multiple"
msgstr ""
-#: part/models.py:2437
+#: part/models.py:2425
msgid "Test templates can only be created for trackable parts"
msgstr ""
-#: part/models.py:2454
+#: part/models.py:2442
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2474 templates/js/translated/part.js:1819
+#: part/models.py:2462 templates/js/translated/part.js:1819
#: templates/js/translated/stock.js:1284
msgid "Test Name"
msgstr ""
-#: part/models.py:2475
+#: part/models.py:2463
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:2480
+#: part/models.py:2468
msgid "Test Description"
msgstr ""
-#: part/models.py:2481
+#: part/models.py:2469
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2486 templates/js/translated/part.js:1828
+#: part/models.py:2474 templates/js/translated/part.js:1828
#: templates/js/translated/table_filters.js:294
msgid "Required"
msgstr ""
-#: part/models.py:2487
+#: part/models.py:2475
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2492 templates/js/translated/part.js:1836
+#: part/models.py:2480 templates/js/translated/part.js:1836
msgid "Requires Value"
msgstr ""
-#: part/models.py:2493
+#: part/models.py:2481
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2498 templates/js/translated/part.js:1843
+#: part/models.py:2486 templates/js/translated/part.js:1843
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:2499
+#: part/models.py:2487
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:2510
+#: part/models.py:2498
#, python-brace-format
msgid "Illegal character in template name ({c})"
msgstr ""
-#: part/models.py:2546
+#: part/models.py:2534
msgid "Parameter template name must be unique"
msgstr ""
-#: part/models.py:2554
+#: part/models.py:2542
msgid "Parameter Name"
msgstr ""
-#: part/models.py:2561
+#: part/models.py:2549
msgid "Parameter Units"
msgstr ""
-#: part/models.py:2591
+#: part/models.py:2579
msgid "Parent Part"
msgstr ""
-#: part/models.py:2593 part/models.py:2642 part/models.py:2643
+#: part/models.py:2581 part/models.py:2630 part/models.py:2631
#: templates/InvenTree/settings/settings.html:226
msgid "Parameter Template"
msgstr ""
-#: part/models.py:2595
+#: part/models.py:2583
msgid "Data"
msgstr ""
-#: part/models.py:2595
+#: part/models.py:2583
msgid "Parameter Value"
msgstr ""
-#: part/models.py:2647 templates/InvenTree/settings/settings.html:235
+#: part/models.py:2635 templates/InvenTree/settings/settings.html:235
msgid "Default Value"
msgstr ""
-#: part/models.py:2648
+#: part/models.py:2636
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:2682
+#: part/models.py:2670
msgid "Part ID or part name"
msgstr ""
-#: part/models.py:2685 templates/js/translated/model_renderers.js:200
+#: part/models.py:2673 templates/js/translated/model_renderers.js:200
msgid "Part ID"
msgstr ""
-#: part/models.py:2686
+#: part/models.py:2674
msgid "Unique part ID value"
msgstr ""
-#: part/models.py:2689
+#: part/models.py:2677
msgid "Part Name"
msgstr ""
-#: part/models.py:2693
+#: part/models.py:2681
msgid "Part IPN"
msgstr ""
-#: part/models.py:2694
+#: part/models.py:2682
msgid "Part IPN value"
msgstr ""
-#: part/models.py:2697
+#: part/models.py:2685
msgid "Level"
msgstr ""
-#: part/models.py:2698
+#: part/models.py:2686
msgid "BOM level"
msgstr ""
-#: part/models.py:2773
+#: part/models.py:2761
msgid "Select parent part"
msgstr ""
-#: part/models.py:2781
+#: part/models.py:2769
msgid "Sub part"
msgstr ""
-#: part/models.py:2782
+#: part/models.py:2770
msgid "Select part to be used in BOM"
msgstr ""
-#: part/models.py:2788
+#: part/models.py:2776
msgid "BOM quantity for this BOM item"
msgstr ""
-#: part/models.py:2790 part/templates/part/upload_bom.html:58
+#: part/models.py:2778 part/templates/part/upload_bom.html:58
#: templates/js/translated/bom.js:898 templates/js/translated/bom.js:992
#: templates/js/translated/table_filters.js:92
msgid "Optional"
msgstr ""
-#: part/models.py:2790
+#: part/models.py:2778
msgid "This BOM item is optional"
msgstr ""
-#: part/models.py:2793 part/templates/part/upload_bom.html:55
+#: part/models.py:2781 part/templates/part/upload_bom.html:55
msgid "Overage"
msgstr ""
-#: part/models.py:2794
+#: part/models.py:2782
msgid "Estimated build wastage quantity (absolute or percentage)"
msgstr ""
-#: part/models.py:2797
+#: part/models.py:2785
msgid "BOM item reference"
msgstr ""
-#: part/models.py:2800
+#: part/models.py:2788
msgid "BOM item notes"
msgstr ""
-#: part/models.py:2802
+#: part/models.py:2790
msgid "Checksum"
msgstr ""
-#: part/models.py:2802
+#: part/models.py:2790
msgid "BOM line checksum"
msgstr ""
-#: part/models.py:2806 part/templates/part/upload_bom.html:57
+#: part/models.py:2794 part/templates/part/upload_bom.html:57
#: templates/js/translated/bom.js:1009
#: templates/js/translated/table_filters.js:68
#: templates/js/translated/table_filters.js:88
msgid "Inherited"
msgstr ""
-#: part/models.py:2807
+#: part/models.py:2795
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr ""
-#: part/models.py:2812 part/templates/part/upload_bom.html:56
+#: part/models.py:2800 part/templates/part/upload_bom.html:56
#: templates/js/translated/bom.js:1001
msgid "Allow Variants"
msgstr ""
-#: part/models.py:2813
+#: part/models.py:2801
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:2898 stock/models.py:495
+#: part/models.py:2886 stock/models.py:486
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:2907 part/models.py:2909
+#: part/models.py:2895 part/models.py:2897
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:3021
+#: part/models.py:3009
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:3043
+#: part/models.py:3031
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:3055
+#: part/models.py:3043
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:3063
+#: part/models.py:3051
msgid "Substitute part"
msgstr ""
-#: part/models.py:3074
+#: part/models.py:3062
msgid "Part 1"
msgstr ""
-#: part/models.py:3078
+#: part/models.py:3066
msgid "Part 2"
msgstr ""
-#: part/models.py:3078
+#: part/models.py:3066
msgid "Select Related Part"
msgstr ""
-#: part/models.py:3110
+#: part/models.py:3098
msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique"
msgstr ""
-#: part/serializers.py:157 part/serializers.py:189 stock/serializers.py:177
+#: part/serializers.py:152 part/serializers.py:184 stock/serializers.py:169
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:923
+#: part/serializers.py:918
msgid "Select part to copy BOM from"
msgstr ""
-#: part/serializers.py:934
+#: part/serializers.py:929
msgid "Remove Existing Data"
msgstr ""
-#: part/serializers.py:935
+#: part/serializers.py:930
msgid "Remove existing BOM items before copying"
msgstr ""
-#: part/serializers.py:940
+#: part/serializers.py:935
msgid "Include Inherited"
msgstr ""
-#: part/serializers.py:941
+#: part/serializers.py:936
msgid "Include BOM items which are inherited from templated parts"
msgstr ""
-#: part/serializers.py:946
+#: part/serializers.py:941
msgid "Skip Invalid Rows"
msgstr ""
-#: part/serializers.py:947
+#: part/serializers.py:942
msgid "Enable this option to skip invalid rows"
msgstr ""
-#: part/serializers.py:952
+#: part/serializers.py:947
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:953
+#: part/serializers.py:948
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
-#: part/serializers.py:997
+#: part/serializers.py:992
msgid "Clear Existing BOM"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:993
msgid "Delete existing BOM items before uploading"
msgstr ""
-#: part/serializers.py:1025
+#: part/serializers.py:1020
msgid "No part column specified"
msgstr ""
-#: part/serializers.py:1068
+#: part/serializers.py:1063
msgid "Multiple matching parts found"
msgstr ""
-#: part/serializers.py:1071
+#: part/serializers.py:1066
msgid "No matching part found"
msgstr ""
-#: part/serializers.py:1074
+#: part/serializers.py:1069
msgid "Part is not designated as a component"
msgstr ""
-#: part/serializers.py:1083
+#: part/serializers.py:1078
msgid "Quantity not provided"
msgstr ""
-#: part/serializers.py:1091
+#: part/serializers.py:1086
msgid "Invalid quantity"
msgstr ""
-#: part/serializers.py:1110
+#: part/serializers.py:1105
msgid "At least one BOM item is required"
msgstr ""
-#: part/tasks.py:15
+#: part/tasks.py:14
msgid "Low stock notification"
msgstr ""
-#: part/tasks.py:16
+#: part/tasks.py:15
#, python-brace-format
msgid "The available stock for {part.name} has fallen below the configured minimum level"
msgstr ""
@@ -5100,7 +5101,7 @@ msgstr ""
msgid "This part is a variant of %(link)s"
msgstr ""
-#: part/templates/part/part_base.html:194 templates/js/translated/order.js:3150
+#: part/templates/part/part_base.html:194 templates/js/translated/order.js:3305
#: templates/js/translated/table_filters.js:193
msgid "In Stock"
msgstr ""
@@ -5391,93 +5392,93 @@ msgstr ""
msgid "Create a new variant of template '%(full_name)s'."
msgstr ""
-#: part/templatetags/inventree_extras.py:191
+#: part/templatetags/inventree_extras.py:186
msgid "Unknown database"
msgstr ""
-#: part/templatetags/inventree_extras.py:228
+#: part/templatetags/inventree_extras.py:223
#, python-brace-format
msgid "{title} v{version}"
msgstr ""
-#: part/views.py:85
+#: part/views.py:74
msgid "Set Part Category"
msgstr ""
-#: part/views.py:135
+#: part/views.py:124
#, python-brace-format
msgid "Set category for {n} parts"
msgstr ""
-#: part/views.py:207
+#: part/views.py:196
msgid "Match References"
msgstr ""
-#: part/views.py:508
+#: part/views.py:497
msgid "None"
msgstr ""
-#: part/views.py:567
+#: part/views.py:556
msgid "Part QR Code"
msgstr ""
-#: part/views.py:669
+#: part/views.py:658
msgid "Select Part Image"
msgstr ""
-#: part/views.py:695
+#: part/views.py:684
msgid "Updated part image"
msgstr ""
-#: part/views.py:698
+#: part/views.py:687
msgid "Part image not found"
msgstr ""
-#: part/views.py:786
+#: part/views.py:775
msgid "Confirm Part Deletion"
msgstr ""
-#: part/views.py:793
+#: part/views.py:782
msgid "Part was deleted"
msgstr ""
-#: part/views.py:802
+#: part/views.py:791
msgid "Part Pricing"
msgstr ""
-#: part/views.py:951
+#: part/views.py:940
msgid "Create Part Parameter Template"
msgstr ""
-#: part/views.py:961
+#: part/views.py:950
msgid "Edit Part Parameter Template"
msgstr ""
-#: part/views.py:968
+#: part/views.py:957
msgid "Delete Part Parameter Template"
msgstr ""
-#: part/views.py:1010
+#: part/views.py:999
msgid "Delete Part Category"
msgstr ""
-#: part/views.py:1016
+#: part/views.py:1005
msgid "Part category was deleted"
msgstr ""
-#: part/views.py:1025
+#: part/views.py:1014
msgid "Create Category Parameter Template"
msgstr ""
-#: part/views.py:1126
+#: part/views.py:1115
msgid "Edit Category Parameter Template"
msgstr ""
-#: part/views.py:1182
+#: part/views.py:1171
msgid "Delete Category Parameter Template"
msgstr ""
-#: plugin/apps.py:49
+#: plugin/apps.py:48
msgid "Your enviroment has an outdated git version. This prevents InvenTree from loading plugin details."
msgstr ""
@@ -5489,47 +5490,47 @@ msgstr ""
msgid "No matching action found"
msgstr ""
-#: plugin/base/barcodes/api.py:53 plugin/base/barcodes/api.py:153
+#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:152
msgid "Must provide barcode_data parameter"
msgstr ""
-#: plugin/base/barcodes/api.py:129
+#: plugin/base/barcodes/api.py:128
msgid "No match found for barcode data"
msgstr ""
-#: plugin/base/barcodes/api.py:131
+#: plugin/base/barcodes/api.py:130
msgid "Match found for barcode data"
msgstr ""
-#: plugin/base/barcodes/api.py:156
+#: plugin/base/barcodes/api.py:155
msgid "Must provide stockitem parameter"
msgstr ""
-#: plugin/base/barcodes/api.py:163
+#: plugin/base/barcodes/api.py:162
msgid "No matching stock item found"
msgstr ""
-#: plugin/base/barcodes/api.py:193
+#: plugin/base/barcodes/api.py:192
msgid "Barcode already matches Stock Item"
msgstr ""
-#: plugin/base/barcodes/api.py:197
+#: plugin/base/barcodes/api.py:196
msgid "Barcode already matches Stock Location"
msgstr ""
-#: plugin/base/barcodes/api.py:201
+#: plugin/base/barcodes/api.py:200
msgid "Barcode already matches Part"
msgstr ""
-#: plugin/base/barcodes/api.py:207 plugin/base/barcodes/api.py:219
+#: plugin/base/barcodes/api.py:206 plugin/base/barcodes/api.py:218
msgid "Barcode hash already matches Stock Item"
msgstr ""
-#: plugin/base/barcodes/api.py:225
+#: plugin/base/barcodes/api.py:224
msgid "Barcode associated with Stock Item"
msgstr ""
-#: plugin/base/label/label.py:40
+#: plugin/base/label/label.py:39
msgid "Label printing failed"
msgstr ""
@@ -5551,51 +5552,51 @@ msgstr ""
msgid "Allow sending of emails for event notifications"
msgstr ""
-#: plugin/models.py:36
+#: plugin/models.py:35
msgid "Plugin Metadata"
msgstr ""
-#: plugin/models.py:37
+#: plugin/models.py:36
msgid "JSON metadata field, for use by external plugins"
msgstr ""
-#: plugin/models.py:86
+#: plugin/models.py:85
msgid "Plugin Configuration"
msgstr ""
-#: plugin/models.py:87
+#: plugin/models.py:86
msgid "Plugin Configurations"
msgstr ""
-#: plugin/models.py:92
+#: plugin/models.py:91
msgid "Key"
msgstr ""
-#: plugin/models.py:93
+#: plugin/models.py:92
msgid "Key of plugin"
msgstr ""
-#: plugin/models.py:101
+#: plugin/models.py:100
msgid "PluginName of the plugin"
msgstr ""
-#: plugin/models.py:107
+#: plugin/models.py:106
msgid "Is the plugin active"
msgstr ""
-#: plugin/models.py:180
+#: plugin/models.py:179
msgid "Plugin"
msgstr ""
-#: plugin/models.py:254
+#: plugin/models.py:253
msgid "Method"
msgstr ""
-#: plugin/plugin.py:247
+#: plugin/plugin.py:246
msgid "No author found"
msgstr ""
-#: plugin/plugin.py:261
+#: plugin/plugin.py:260
msgid "No date found"
msgstr ""
@@ -5663,92 +5664,96 @@ msgstr ""
msgid "Either packagename of URL must be provided"
msgstr ""
-#: report/api.py:233 report/api.py:280
+#: report/api.py:191
+msgid "No valid objects provided to template"
+msgstr ""
+
+#: report/api.py:223 report/api.py:270
#, python-brace-format
msgid "Template file '{template}' is missing or does not exist"
msgstr ""
-#: report/models.py:175
+#: report/models.py:170
msgid "Template name"
msgstr ""
-#: report/models.py:181
+#: report/models.py:176
msgid "Report template file"
msgstr ""
-#: report/models.py:188
+#: report/models.py:183
msgid "Report template description"
msgstr ""
-#: report/models.py:194
+#: report/models.py:189
msgid "Report revision number (auto-increments)"
msgstr ""
-#: report/models.py:285
+#: report/models.py:280
msgid "Pattern for generating report filenames"
msgstr ""
-#: report/models.py:292
+#: report/models.py:287
msgid "Report template is enabled"
msgstr ""
-#: report/models.py:316
+#: report/models.py:311
msgid "StockItem query filters (comma-separated list of key=value pairs)"
msgstr ""
-#: report/models.py:324
+#: report/models.py:319
msgid "Include Installed Tests"
msgstr ""
-#: report/models.py:325
+#: report/models.py:320
msgid "Include test results for stock items installed inside assembled item"
msgstr ""
-#: report/models.py:375
+#: report/models.py:370
msgid "Build Filters"
msgstr ""
-#: report/models.py:376
+#: report/models.py:371
msgid "Build query filters (comma-separated list of key=value pairs"
msgstr ""
-#: report/models.py:418
+#: report/models.py:413
msgid "Part Filters"
msgstr ""
-#: report/models.py:419
+#: report/models.py:414
msgid "Part query filters (comma-separated list of key=value pairs"
msgstr ""
-#: report/models.py:453
+#: report/models.py:448
msgid "Purchase order query filters"
msgstr ""
-#: report/models.py:492
+#: report/models.py:487
msgid "Sales order query filters"
msgstr ""
-#: report/models.py:547
+#: report/models.py:542
msgid "Snippet"
msgstr ""
-#: report/models.py:548
+#: report/models.py:543
msgid "Report snippet file"
msgstr ""
-#: report/models.py:552
+#: report/models.py:547
msgid "Snippet file description"
msgstr ""
-#: report/models.py:587
+#: report/models.py:582
msgid "Asset"
msgstr ""
-#: report/models.py:588
+#: report/models.py:583
msgid "Report asset file"
msgstr ""
-#: report/models.py:591
+#: report/models.py:586
msgid "Asset file description"
msgstr ""
@@ -5765,12 +5770,12 @@ msgid "Stock Item Test Report"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:79
-#: stock/models.py:664 stock/templates/stock/item_base.html:162
+#: stock/models.py:655 stock/templates/stock/item_base.html:162
#: templates/js/translated/build.js:420 templates/js/translated/build.js:572
#: templates/js/translated/build.js:1178 templates/js/translated/build.js:1688
#: templates/js/translated/model_renderers.js:106
-#: templates/js/translated/order.js:108 templates/js/translated/order.js:2836
-#: templates/js/translated/order.js:2925 templates/js/translated/stock.js:435
+#: templates/js/translated/order.js:109 templates/js/translated/order.js:2991
+#: templates/js/translated/order.js:3080 templates/js/translated/stock.js:435
msgid "Serial Number"
msgstr ""
@@ -5779,19 +5784,19 @@ msgid "Test Results"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:93
-#: stock/models.py:2192
+#: stock/models.py:2183
msgid "Test"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:94
-#: stock/models.py:2198
+#: stock/models.py:2189
msgid "Result"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:97
#: templates/InvenTree/settings/plugin.html:51
#: templates/InvenTree/settings/plugin_settings.html:38
-#: templates/js/translated/order.js:1469 templates/js/translated/stock.js:2345
+#: templates/js/translated/order.js:1575 templates/js/translated/stock.js:2345
msgid "Date"
msgstr ""
@@ -5814,362 +5819,362 @@ msgstr ""
msgid "Serial"
msgstr ""
-#: stock/api.py:554
+#: stock/api.py:542
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:561
+#: stock/api.py:549
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:586
+#: stock/api.py:574
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/models.py:91 stock/models.py:759
+#: stock/models.py:82 stock/models.py:750
#: stock/templates/stock/item_base.html:417
msgid "Owner"
msgstr ""
-#: stock/models.py:92 stock/models.py:760
+#: stock/models.py:83 stock/models.py:751
msgid "Select Owner"
msgstr ""
-#: stock/models.py:468
+#: stock/models.py:459
msgid "StockItem with this serial number already exists"
msgstr ""
-#: stock/models.py:512
+#: stock/models.py:503
#, python-brace-format
msgid "Part type ('{pf}') must be {pe}"
msgstr ""
-#: stock/models.py:522 stock/models.py:531
+#: stock/models.py:513 stock/models.py:522
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:523
+#: stock/models.py:514
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:545
+#: stock/models.py:536
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:551
+#: stock/models.py:542
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:565
+#: stock/models.py:556
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:608
+#: stock/models.py:599
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:617
+#: stock/models.py:608
msgid "Base part"
msgstr ""
-#: stock/models.py:625
+#: stock/models.py:616
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:631 stock/templates/stock/location.html:17
+#: stock/models.py:622 stock/templates/stock/location.html:17
#: stock/templates/stock/stock_app_base.html:8
msgid "Stock Location"
msgstr "Kho hàng"
-#: stock/models.py:634
+#: stock/models.py:625
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:641
+#: stock/models.py:632
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:647 stock/templates/stock/item_base.html:288
+#: stock/models.py:638 stock/templates/stock/item_base.html:288
msgid "Installed In"
msgstr ""
-#: stock/models.py:650
+#: stock/models.py:641
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:666
+#: stock/models.py:657
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:680
+#: stock/models.py:671
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:685
+#: stock/models.py:676
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:694
+#: stock/models.py:685
msgid "Source Build"
msgstr ""
-#: stock/models.py:696
+#: stock/models.py:687
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:707
+#: stock/models.py:698
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:710
+#: stock/models.py:701
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:716
+#: stock/models.py:707
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:722 stock/templates/stock/item_base.html:199
+#: stock/models.py:713 stock/templates/stock/item_base.html:199
#: templates/js/translated/stock.js:1822
msgid "Expiry Date"
msgstr ""
-#: stock/models.py:723
+#: stock/models.py:714
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:736
+#: stock/models.py:727
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:736
+#: stock/models.py:727
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:746 stock/templates/stock/item.html:137
+#: stock/models.py:737 stock/templates/stock/item.html:137
msgid "Stock Item Notes"
msgstr ""
-#: stock/models.py:755
+#: stock/models.py:746
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:787
+#: stock/models.py:778
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1307
+#: stock/models.py:1298
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1313
+#: stock/models.py:1304
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1319
+#: stock/models.py:1310
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({n})"
msgstr ""
-#: stock/models.py:1322
+#: stock/models.py:1313
msgid "Serial numbers must be a list of integers"
msgstr ""
-#: stock/models.py:1325
+#: stock/models.py:1316
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1332
+#: stock/models.py:1323
#, python-brace-format
msgid "Serial numbers already exist: {exists}"
msgstr ""
-#: stock/models.py:1403
+#: stock/models.py:1394
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:1406
+#: stock/models.py:1397
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:1409
+#: stock/models.py:1400
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:1412
+#: stock/models.py:1403
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:1415
+#: stock/models.py:1406
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:1418
+#: stock/models.py:1409
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:1425 stock/serializers.py:871
+#: stock/models.py:1416 stock/serializers.py:863
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:1429
+#: stock/models.py:1420
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:1433
+#: stock/models.py:1424
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:1437
+#: stock/models.py:1428
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:1609
+#: stock/models.py:1600
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2112
+#: stock/models.py:2103
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2169
+#: stock/models.py:2160
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:2175
+#: stock/models.py:2166
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:2193
+#: stock/models.py:2184
msgid "Test name"
msgstr ""
-#: stock/models.py:2199
+#: stock/models.py:2190
msgid "Test result"
msgstr ""
-#: stock/models.py:2205
+#: stock/models.py:2196
msgid "Test output value"
msgstr ""
-#: stock/models.py:2212
+#: stock/models.py:2203
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:2218
+#: stock/models.py:2209
msgid "Test notes"
msgstr ""
-#: stock/serializers.py:170
+#: stock/serializers.py:162
msgid "Purchase price of this stock item"
msgstr ""
-#: stock/serializers.py:291
+#: stock/serializers.py:283
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:306
+#: stock/serializers.py:298
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:312
+#: stock/serializers.py:304
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:323 stock/serializers.py:828 stock/serializers.py:1069
+#: stock/serializers.py:315 stock/serializers.py:820 stock/serializers.py:1061
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:330
+#: stock/serializers.py:322
msgid "Optional note field"
msgstr ""
-#: stock/serializers.py:343
+#: stock/serializers.py:335
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:360
+#: stock/serializers.py:352
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:402
+#: stock/serializers.py:394
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:418
+#: stock/serializers.py:410
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:425
+#: stock/serializers.py:417
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:463
+#: stock/serializers.py:455
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:468
+#: stock/serializers.py:460
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:685
+#: stock/serializers.py:677
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:689
+#: stock/serializers.py:681
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:693
+#: stock/serializers.py:685
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:723
+#: stock/serializers.py:715
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:729
+#: stock/serializers.py:721
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:737
+#: stock/serializers.py:729
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:747 stock/serializers.py:977
+#: stock/serializers.py:739 stock/serializers.py:969
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:835
+#: stock/serializers.py:827
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:840
+#: stock/serializers.py:832
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:841
+#: stock/serializers.py:833
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:846
+#: stock/serializers.py:838
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:847
+#: stock/serializers.py:839
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:857
+#: stock/serializers.py:849
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:939
+#: stock/serializers.py:931
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:967
+#: stock/serializers.py:959
msgid "Stock transaction notes"
msgstr ""
@@ -6482,7 +6487,7 @@ msgid "Sublocations"
msgstr ""
#: stock/templates/stock/location.html:156 templates/InvenTree/search.html:164
-#: templates/js/translated/search.js:153 users/models.py:42
+#: templates/js/translated/search.js:153 users/models.py:40
msgid "Stock Locations"
msgstr ""
@@ -6534,7 +6539,7 @@ msgstr ""
msgid "Child Items"
msgstr ""
-#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:227
+#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:221
msgid "Convert Stock Item"
msgstr ""
@@ -6559,55 +6564,55 @@ msgstr ""
msgid "Are you sure you want to delete this stock tracking entry?"
msgstr ""
-#: stock/views.py:125
+#: stock/views.py:119
msgid "Stock Location QR code"
msgstr ""
-#: stock/views.py:144
+#: stock/views.py:138
msgid "Return to Stock"
msgstr ""
-#: stock/views.py:153
+#: stock/views.py:147
msgid "Specify a valid location"
msgstr ""
-#: stock/views.py:164
+#: stock/views.py:158
msgid "Stock item returned from customer"
msgstr ""
-#: stock/views.py:175
+#: stock/views.py:169
msgid "Delete All Test Data"
msgstr ""
-#: stock/views.py:192
+#: stock/views.py:186
msgid "Confirm test data deletion"
msgstr ""
-#: stock/views.py:193
+#: stock/views.py:187
msgid "Check the confirmation box"
msgstr ""
-#: stock/views.py:208
+#: stock/views.py:202
msgid "Stock Item QR Code"
msgstr ""
-#: stock/views.py:264
+#: stock/views.py:258
msgid "Delete Stock Location"
msgstr ""
-#: stock/views.py:277
+#: stock/views.py:271
msgid "Delete Stock Item"
msgstr ""
-#: stock/views.py:288
+#: stock/views.py:282
msgid "Delete Stock Tracking Entry"
msgstr ""
-#: stock/views.py:295
+#: stock/views.py:289
msgid "Edit Stock Tracking Entry"
msgstr ""
-#: stock/views.py:304
+#: stock/views.py:298
msgid "Add Stock Tracking Entry"
msgstr ""
@@ -6881,7 +6886,7 @@ msgid "Install Plugin"
msgstr ""
#: templates/InvenTree/settings/plugin.html:48 templates/navbar.html:137
-#: users/models.py:39
+#: users/models.py:37
msgid "Admin"
msgstr "Quản trị"
@@ -7326,9 +7331,9 @@ msgstr ""
#: templates/about.html:11 templates/about.html:105
#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621
-#: templates/js/translated/modals.js:55 templates/js/translated/modals.js:591
-#: templates/js/translated/modals.js:685 templates/js/translated/modals.js:993
-#: templates/js/translated/order.js:807 templates/modals.html:15
+#: templates/js/translated/modals.js:55 templates/js/translated/modals.js:594
+#: templates/js/translated/modals.js:688 templates/js/translated/modals.js:996
+#: templates/js/translated/order.js:913 templates/modals.html:15
#: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50
msgid "Close"
msgstr ""
@@ -7639,11 +7644,11 @@ msgstr ""
msgid "Remote image must not exceed maximum allowable file size"
msgstr ""
-#: templates/js/translated/api.js:190 templates/js/translated/modals.js:1063
+#: templates/js/translated/api.js:190 templates/js/translated/modals.js:1066
msgid "No Response"
msgstr ""
-#: templates/js/translated/api.js:191 templates/js/translated/modals.js:1064
+#: templates/js/translated/api.js:191 templates/js/translated/modals.js:1067
msgid "No response from the InvenTree server"
msgstr ""
@@ -7655,27 +7660,27 @@ msgstr ""
msgid "API request returned error code 400"
msgstr ""
-#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1073
+#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1076
msgid "Error 401: Not Authenticated"
msgstr ""
-#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1074
+#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1077
msgid "Authentication credentials not supplied"
msgstr ""
-#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1078
+#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1081
msgid "Error 403: Permission Denied"
msgstr ""
-#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1079
+#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1082
msgid "You do not have the required permissions to access this function"
msgstr ""
-#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1083
+#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1086
msgid "Error 404: Resource Not Found"
msgstr ""
-#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1084
+#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1087
msgid "The requested resource could not be located on the server"
msgstr ""
@@ -7687,11 +7692,11 @@ msgstr ""
msgid "HTTP method not allowed at URL"
msgstr ""
-#: templates/js/translated/api.js:222 templates/js/translated/modals.js:1088
+#: templates/js/translated/api.js:222 templates/js/translated/modals.js:1091
msgid "Error 408: Timeout"
msgstr ""
-#: templates/js/translated/api.js:223 templates/js/translated/modals.js:1089
+#: templates/js/translated/api.js:223 templates/js/translated/modals.js:1092
msgid "Connection timeout while requesting data from server"
msgstr ""
@@ -7760,7 +7765,7 @@ msgid "Unknown response from server"
msgstr ""
#: templates/js/translated/barcode.js:182
-#: templates/js/translated/modals.js:1053
+#: templates/js/translated/modals.js:1056
msgid "Invalid server response"
msgstr ""
@@ -7842,12 +7847,12 @@ msgid "Download BOM Template"
msgstr ""
#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287
-#: templates/js/translated/order.js:588 templates/js/translated/tables.js:53
+#: templates/js/translated/order.js:694 templates/js/translated/tables.js:53
msgid "Format"
msgstr ""
#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288
-#: templates/js/translated/order.js:589
+#: templates/js/translated/order.js:695
msgid "Select file format"
msgstr ""
@@ -8147,12 +8152,12 @@ msgid "No required tests for this build"
msgstr ""
#: templates/js/translated/build.js:1727 templates/js/translated/build.js:2556
-#: templates/js/translated/order.js:2873
+#: templates/js/translated/order.js:3028
msgid "Edit stock allocation"
msgstr ""
#: templates/js/translated/build.js:1729 templates/js/translated/build.js:2557
-#: templates/js/translated/order.js:2874
+#: templates/js/translated/order.js:3029
msgid "Delete stock allocation"
msgstr ""
@@ -8181,11 +8186,11 @@ msgid "Sufficient stock available"
msgstr ""
#: templates/js/translated/build.js:1856 templates/js/translated/build.js:2101
-#: templates/js/translated/build.js:2552 templates/js/translated/order.js:3160
+#: templates/js/translated/build.js:2552 templates/js/translated/order.js:3315
msgid "Allocated"
msgstr ""
-#: templates/js/translated/build.js:1904 templates/js/translated/order.js:3240
+#: templates/js/translated/build.js:1904 templates/js/translated/order.js:3395
msgid "Build stock"
msgstr ""
@@ -8193,21 +8198,21 @@ msgstr ""
msgid "Order stock"
msgstr ""
-#: templates/js/translated/build.js:1911 templates/js/translated/order.js:3233
+#: templates/js/translated/build.js:1911 templates/js/translated/order.js:3388
msgid "Allocate stock"
msgstr ""
#: templates/js/translated/build.js:1950 templates/js/translated/label.js:172
-#: templates/js/translated/order.js:635 templates/js/translated/order.js:2449
+#: templates/js/translated/order.js:741 templates/js/translated/order.js:2555
#: templates/js/translated/report.js:225
msgid "Select Parts"
msgstr ""
-#: templates/js/translated/build.js:1951 templates/js/translated/order.js:2450
+#: templates/js/translated/build.js:1951 templates/js/translated/order.js:2556
msgid "You must select at least one part to allocate"
msgstr ""
-#: templates/js/translated/build.js:2000 templates/js/translated/order.js:2398
+#: templates/js/translated/build.js:2000 templates/js/translated/order.js:2504
msgid "Specify stock allocation quantity"
msgstr ""
@@ -8219,7 +8224,7 @@ msgstr ""
msgid "All selected parts have been fully allocated"
msgstr ""
-#: templates/js/translated/build.js:2089 templates/js/translated/order.js:2464
+#: templates/js/translated/build.js:2089 templates/js/translated/order.js:2570
msgid "Select source location (leave blank to take from all locations)"
msgstr ""
@@ -8227,11 +8232,11 @@ msgstr ""
msgid "Allocate Stock Items to Build Order"
msgstr ""
-#: templates/js/translated/build.js:2128 templates/js/translated/order.js:2512
+#: templates/js/translated/build.js:2128 templates/js/translated/order.js:2667
msgid "No matching stock locations"
msgstr ""
-#: templates/js/translated/build.js:2200 templates/js/translated/order.js:2589
+#: templates/js/translated/build.js:2200 templates/js/translated/order.js:2744
msgid "No matching stock items"
msgstr ""
@@ -8305,7 +8310,7 @@ msgstr ""
msgid "Delete Manufacturer Part"
msgstr ""
-#: templates/js/translated/company.js:165 templates/js/translated/order.js:385
+#: templates/js/translated/company.js:165 templates/js/translated/order.js:491
msgid "Add Supplier"
msgstr ""
@@ -8440,40 +8445,40 @@ msgstr ""
msgid "View operation not allowed"
msgstr ""
-#: templates/js/translated/forms.js:641
+#: templates/js/translated/forms.js:646
msgid "Keep this form open"
msgstr ""
-#: templates/js/translated/forms.js:716
+#: templates/js/translated/forms.js:746
msgid "Enter a valid number"
msgstr ""
-#: templates/js/translated/forms.js:1208 templates/modals.html:19
+#: templates/js/translated/forms.js:1238 templates/modals.html:19
#: templates/modals.html:43
msgid "Form errors exist"
msgstr ""
-#: templates/js/translated/forms.js:1634
+#: templates/js/translated/forms.js:1671
msgid "No results found"
msgstr ""
-#: templates/js/translated/forms.js:1849 templates/search.html:29
+#: templates/js/translated/forms.js:1886 templates/search.html:29
msgid "Searching"
msgstr ""
-#: templates/js/translated/forms.js:2102
+#: templates/js/translated/forms.js:2139
msgid "Clear input"
msgstr ""
-#: templates/js/translated/forms.js:2567
+#: templates/js/translated/forms.js:2605
msgid "File Column"
msgstr ""
-#: templates/js/translated/forms.js:2567
+#: templates/js/translated/forms.js:2605
msgid "Field Name"
msgstr ""
-#: templates/js/translated/forms.js:2579
+#: templates/js/translated/forms.js:2617
msgid "Select Columns"
msgstr ""
@@ -8547,62 +8552,62 @@ msgstr ""
msgid "Select Label Template"
msgstr ""
-#: templates/js/translated/modals.js:78 templates/js/translated/modals.js:138
-#: templates/js/translated/modals.js:617
+#: templates/js/translated/modals.js:81 templates/js/translated/modals.js:141
+#: templates/js/translated/modals.js:620
msgid "Cancel"
msgstr ""
-#: templates/js/translated/modals.js:79 templates/js/translated/modals.js:137
-#: templates/js/translated/modals.js:684 templates/js/translated/modals.js:992
+#: templates/js/translated/modals.js:82 templates/js/translated/modals.js:140
+#: templates/js/translated/modals.js:687 templates/js/translated/modals.js:995
#: templates/modals.html:28 templates/modals.html:51
msgid "Submit"
msgstr ""
-#: templates/js/translated/modals.js:136
+#: templates/js/translated/modals.js:139
msgid "Form Title"
msgstr ""
-#: templates/js/translated/modals.js:399
+#: templates/js/translated/modals.js:402
msgid "Waiting for server..."
msgstr ""
-#: templates/js/translated/modals.js:558
+#: templates/js/translated/modals.js:561
msgid "Show Error Information"
msgstr ""
-#: templates/js/translated/modals.js:616
+#: templates/js/translated/modals.js:619
msgid "Accept"
msgstr ""
-#: templates/js/translated/modals.js:673
+#: templates/js/translated/modals.js:676
msgid "Loading Data"
msgstr ""
-#: templates/js/translated/modals.js:944
+#: templates/js/translated/modals.js:947
msgid "Invalid response from server"
msgstr ""
-#: templates/js/translated/modals.js:944
+#: templates/js/translated/modals.js:947
msgid "Form data missing from server response"
msgstr ""
-#: templates/js/translated/modals.js:956
+#: templates/js/translated/modals.js:959
msgid "Error posting form data"
msgstr ""
-#: templates/js/translated/modals.js:1053
+#: templates/js/translated/modals.js:1056
msgid "JSON response missing form data"
msgstr ""
-#: templates/js/translated/modals.js:1068
+#: templates/js/translated/modals.js:1071
msgid "Error 400: Bad Request"
msgstr ""
-#: templates/js/translated/modals.js:1069
+#: templates/js/translated/modals.js:1072
msgid "Server returned error code 400"
msgstr ""
-#: templates/js/translated/modals.js:1092
+#: templates/js/translated/modals.js:1095
msgid "Error requesting form data"
msgstr ""
@@ -8660,361 +8665,377 @@ msgstr ""
msgid "Notifications will load here"
msgstr ""
-#: templates/js/translated/order.js:84
+#: templates/js/translated/order.js:85
msgid "No stock items have been allocated to this shipment"
msgstr ""
-#: templates/js/translated/order.js:89
+#: templates/js/translated/order.js:90
msgid "The following stock items will be shipped"
msgstr ""
-#: templates/js/translated/order.js:129
+#: templates/js/translated/order.js:130
msgid "Complete Shipment"
msgstr ""
-#: templates/js/translated/order.js:135
+#: templates/js/translated/order.js:141
msgid "Confirm Shipment"
msgstr ""
-#: templates/js/translated/order.js:157
+#: templates/js/translated/order.js:197
+msgid "No pending shipments found"
+msgstr ""
+
+#: templates/js/translated/order.js:201
+msgid "No stock items have been allocated to pending shipments"
+msgstr ""
+
+#: templates/js/translated/order.js:233
+msgid "Skip"
+msgstr ""
+
+#: templates/js/translated/order.js:263
msgid "Complete Purchase Order"
msgstr ""
-#: templates/js/translated/order.js:163
+#: templates/js/translated/order.js:269
msgid "Mark this order as complete?"
msgstr ""
-#: templates/js/translated/order.js:169
+#: templates/js/translated/order.js:275
msgid "All line items have been received"
msgstr ""
-#: templates/js/translated/order.js:174
+#: templates/js/translated/order.js:280
msgid "This order has line items which have not been marked as received."
msgstr ""
-#: templates/js/translated/order.js:175
+#: templates/js/translated/order.js:281
msgid "Completing this order means that the order and line items will no longer be editable."
msgstr ""
-#: templates/js/translated/order.js:198
+#: templates/js/translated/order.js:304
msgid "Cancel Purchase Order"
msgstr ""
-#: templates/js/translated/order.js:203
+#: templates/js/translated/order.js:309
msgid "Are you sure you wish to cancel this purchase order?"
msgstr ""
-#: templates/js/translated/order.js:209
+#: templates/js/translated/order.js:315
msgid "This purchase order can not be cancelled"
msgstr ""
-#: templates/js/translated/order.js:232
+#: templates/js/translated/order.js:338
msgid "Issue Purchase Order"
msgstr ""
-#: templates/js/translated/order.js:237
+#: templates/js/translated/order.js:343
msgid "After placing this purchase order, line items will no longer be editable."
msgstr ""
-#: templates/js/translated/order.js:259
+#: templates/js/translated/order.js:365
msgid "Cancel Sales Order"
msgstr ""
-#: templates/js/translated/order.js:264
+#: templates/js/translated/order.js:370
msgid "Cancelling this order means that the order will no longer be editable."
msgstr ""
-#: templates/js/translated/order.js:318
+#: templates/js/translated/order.js:424
msgid "Create New Shipment"
msgstr ""
-#: templates/js/translated/order.js:343
+#: templates/js/translated/order.js:449
msgid "Add Customer"
msgstr ""
-#: templates/js/translated/order.js:368
+#: templates/js/translated/order.js:474
msgid "Create Sales Order"
msgstr ""
-#: templates/js/translated/order.js:585
+#: templates/js/translated/order.js:691
msgid "Export Order"
msgstr ""
-#: templates/js/translated/order.js:636
+#: templates/js/translated/order.js:742
msgid "At least one purchaseable part must be selected"
msgstr ""
-#: templates/js/translated/order.js:661
+#: templates/js/translated/order.js:767
msgid "Quantity to order"
msgstr ""
-#: templates/js/translated/order.js:670
+#: templates/js/translated/order.js:776
msgid "New supplier part"
msgstr ""
-#: templates/js/translated/order.js:688
+#: templates/js/translated/order.js:794
msgid "New purchase order"
msgstr ""
-#: templates/js/translated/order.js:721
+#: templates/js/translated/order.js:827
msgid "Add to purchase order"
msgstr ""
-#: templates/js/translated/order.js:830
+#: templates/js/translated/order.js:936
msgid "No matching supplier parts"
msgstr ""
-#: templates/js/translated/order.js:845
+#: templates/js/translated/order.js:951
msgid "No matching purchase orders"
msgstr ""
-#: templates/js/translated/order.js:1001
+#: templates/js/translated/order.js:1107
msgid "Select Line Items"
msgstr ""
-#: templates/js/translated/order.js:1002
+#: templates/js/translated/order.js:1108
msgid "At least one line item must be selected"
msgstr ""
-#: templates/js/translated/order.js:1022 templates/js/translated/order.js:1121
+#: templates/js/translated/order.js:1128 templates/js/translated/order.js:1227
msgid "Add batch code"
msgstr ""
-#: templates/js/translated/order.js:1028 templates/js/translated/order.js:1132
+#: templates/js/translated/order.js:1134 templates/js/translated/order.js:1238
msgid "Add serial numbers"
msgstr ""
-#: templates/js/translated/order.js:1040
+#: templates/js/translated/order.js:1146
msgid "Quantity to receive"
msgstr ""
-#: templates/js/translated/order.js:1104 templates/js/translated/stock.js:2085
+#: templates/js/translated/order.js:1210 templates/js/translated/stock.js:2085
msgid "Stock Status"
msgstr ""
-#: templates/js/translated/order.js:1195
+#: templates/js/translated/order.js:1301
msgid "Order Code"
msgstr ""
-#: templates/js/translated/order.js:1196
+#: templates/js/translated/order.js:1302
msgid "Ordered"
msgstr ""
-#: templates/js/translated/order.js:1198
+#: templates/js/translated/order.js:1304
msgid "Quantity to Receive"
msgstr ""
-#: templates/js/translated/order.js:1217
+#: templates/js/translated/order.js:1323
msgid "Confirm receipt of items"
msgstr ""
-#: templates/js/translated/order.js:1218
+#: templates/js/translated/order.js:1324
msgid "Receive Purchase Order Items"
msgstr ""
-#: templates/js/translated/order.js:1410 templates/js/translated/part.js:870
+#: templates/js/translated/order.js:1516 templates/js/translated/part.js:870
msgid "No purchase orders found"
msgstr ""
-#: templates/js/translated/order.js:1435 templates/js/translated/order.js:2120
+#: templates/js/translated/order.js:1541 templates/js/translated/order.js:2226
msgid "Order is overdue"
msgstr ""
-#: templates/js/translated/order.js:1485 templates/js/translated/order.js:2185
-#: templates/js/translated/order.js:2315
+#: templates/js/translated/order.js:1591 templates/js/translated/order.js:2291
+#: templates/js/translated/order.js:2421
msgid "Items"
msgstr ""
-#: templates/js/translated/order.js:1559 templates/js/translated/order.js:3292
+#: templates/js/translated/order.js:1665 templates/js/translated/order.js:3447
msgid "Duplicate Line Item"
msgstr ""
-#: templates/js/translated/order.js:1576 templates/js/translated/order.js:3314
+#: templates/js/translated/order.js:1682 templates/js/translated/order.js:3469
msgid "Edit Line Item"
msgstr ""
-#: templates/js/translated/order.js:1589 templates/js/translated/order.js:3325
+#: templates/js/translated/order.js:1695 templates/js/translated/order.js:3480
msgid "Delete Line Item"
msgstr ""
-#: templates/js/translated/order.js:1632
+#: templates/js/translated/order.js:1738
msgid "No line items found"
msgstr ""
-#: templates/js/translated/order.js:1659 templates/js/translated/order.js:3049
+#: templates/js/translated/order.js:1765 templates/js/translated/order.js:3204
msgid "Total"
msgstr ""
-#: templates/js/translated/order.js:1713 templates/js/translated/order.js:1915
-#: templates/js/translated/order.js:3074 templates/js/translated/order.js:3557
+#: templates/js/translated/order.js:1819 templates/js/translated/order.js:2021
+#: templates/js/translated/order.js:3229 templates/js/translated/order.js:3714
#: templates/js/translated/part.js:1948 templates/js/translated/part.js:2301
msgid "Unit Price"
msgstr ""
-#: templates/js/translated/order.js:1728 templates/js/translated/order.js:1931
-#: templates/js/translated/order.js:3090 templates/js/translated/order.js:3573
+#: templates/js/translated/order.js:1834 templates/js/translated/order.js:2037
+#: templates/js/translated/order.js:3245 templates/js/translated/order.js:3730
msgid "Total Price"
msgstr ""
-#: templates/js/translated/order.js:1769 templates/js/translated/order.js:3132
+#: templates/js/translated/order.js:1875 templates/js/translated/order.js:3287
#: templates/js/translated/part.js:979
msgid "This line item is overdue"
msgstr ""
-#: templates/js/translated/order.js:1828 templates/js/translated/part.js:1025
+#: templates/js/translated/order.js:1934 templates/js/translated/part.js:1025
msgid "Receive line item"
msgstr ""
-#: templates/js/translated/order.js:1832 templates/js/translated/order.js:3246
+#: templates/js/translated/order.js:1938 templates/js/translated/order.js:3401
msgid "Duplicate line item"
msgstr ""
-#: templates/js/translated/order.js:1833 templates/js/translated/order.js:3247
+#: templates/js/translated/order.js:1939 templates/js/translated/order.js:3402
msgid "Edit line item"
msgstr ""
-#: templates/js/translated/order.js:1834 templates/js/translated/order.js:3251
+#: templates/js/translated/order.js:1940 templates/js/translated/order.js:3406
msgid "Delete line item"
msgstr ""
-#: templates/js/translated/order.js:1980 templates/js/translated/order.js:3622
+#: templates/js/translated/order.js:2086 templates/js/translated/order.js:3779
msgid "Duplicate line"
msgstr ""
-#: templates/js/translated/order.js:1981 templates/js/translated/order.js:3623
+#: templates/js/translated/order.js:2087 templates/js/translated/order.js:3780
msgid "Edit line"
msgstr ""
-#: templates/js/translated/order.js:1982 templates/js/translated/order.js:3624
+#: templates/js/translated/order.js:2088 templates/js/translated/order.js:3781
msgid "Delete line"
msgstr ""
-#: templates/js/translated/order.js:2012 templates/js/translated/order.js:3654
+#: templates/js/translated/order.js:2118 templates/js/translated/order.js:3811
msgid "Duplicate Line"
msgstr ""
-#: templates/js/translated/order.js:2033 templates/js/translated/order.js:3675
+#: templates/js/translated/order.js:2139 templates/js/translated/order.js:3832
msgid "Edit Line"
msgstr ""
-#: templates/js/translated/order.js:2044 templates/js/translated/order.js:3686
+#: templates/js/translated/order.js:2150 templates/js/translated/order.js:3843
msgid "Delete Line"
msgstr ""
-#: templates/js/translated/order.js:2055
+#: templates/js/translated/order.js:2161
msgid "No matching line"
msgstr ""
-#: templates/js/translated/order.js:2096
+#: templates/js/translated/order.js:2202
msgid "No sales orders found"
msgstr ""
-#: templates/js/translated/order.js:2134
+#: templates/js/translated/order.js:2240
msgid "Invalid Customer"
msgstr ""
-#: templates/js/translated/order.js:2221
+#: templates/js/translated/order.js:2327
msgid "Edit shipment"
msgstr ""
-#: templates/js/translated/order.js:2224
+#: templates/js/translated/order.js:2330
msgid "Complete shipment"
msgstr ""
-#: templates/js/translated/order.js:2229
+#: templates/js/translated/order.js:2335
msgid "Delete shipment"
msgstr ""
-#: templates/js/translated/order.js:2249
+#: templates/js/translated/order.js:2355
msgid "Edit Shipment"
msgstr ""
-#: templates/js/translated/order.js:2266
+#: templates/js/translated/order.js:2372
msgid "Delete Shipment"
msgstr ""
-#: templates/js/translated/order.js:2300
+#: templates/js/translated/order.js:2406
msgid "No matching shipments found"
msgstr ""
-#: templates/js/translated/order.js:2310
+#: templates/js/translated/order.js:2416
msgid "Shipment Reference"
msgstr ""
-#: templates/js/translated/order.js:2334
+#: templates/js/translated/order.js:2440
msgid "Not shipped"
msgstr ""
-#: templates/js/translated/order.js:2340
+#: templates/js/translated/order.js:2446
msgid "Tracking"
msgstr ""
-#: templates/js/translated/order.js:2499
+#: templates/js/translated/order.js:2603
+msgid "Add Shipment"
+msgstr ""
+
+#: templates/js/translated/order.js:2654
msgid "Confirm stock allocation"
msgstr ""
-#: templates/js/translated/order.js:2500
+#: templates/js/translated/order.js:2655
msgid "Allocate Stock Items to Sales Order"
msgstr ""
-#: templates/js/translated/order.js:2708
+#: templates/js/translated/order.js:2863
msgid "No sales order allocations found"
msgstr ""
-#: templates/js/translated/order.js:2789
+#: templates/js/translated/order.js:2944
msgid "Edit Stock Allocation"
msgstr ""
-#: templates/js/translated/order.js:2806
+#: templates/js/translated/order.js:2961
msgid "Confirm Delete Operation"
msgstr ""
-#: templates/js/translated/order.js:2807
+#: templates/js/translated/order.js:2962
msgid "Delete Stock Allocation"
msgstr ""
-#: templates/js/translated/order.js:2850 templates/js/translated/order.js:2939
+#: templates/js/translated/order.js:3005 templates/js/translated/order.js:3094
#: templates/js/translated/stock.js:1545
msgid "Shipped to customer"
msgstr ""
-#: templates/js/translated/order.js:2858 templates/js/translated/order.js:2948
+#: templates/js/translated/order.js:3013 templates/js/translated/order.js:3103
msgid "Stock location not specified"
msgstr ""
-#: templates/js/translated/order.js:3230
+#: templates/js/translated/order.js:3385
msgid "Allocate serial numbers"
msgstr ""
-#: templates/js/translated/order.js:3236
+#: templates/js/translated/order.js:3391
msgid "Purchase stock"
msgstr ""
-#: templates/js/translated/order.js:3243 templates/js/translated/order.js:3439
+#: templates/js/translated/order.js:3398 templates/js/translated/order.js:3596
msgid "Calculate price"
msgstr ""
-#: templates/js/translated/order.js:3255
+#: templates/js/translated/order.js:3410
msgid "Cannot be deleted as items have been shipped"
msgstr ""
-#: templates/js/translated/order.js:3258
+#: templates/js/translated/order.js:3413
msgid "Cannot be deleted as items have been allocated"
msgstr ""
-#: templates/js/translated/order.js:3340
+#: templates/js/translated/order.js:3495
msgid "Allocate Serial Numbers"
msgstr ""
-#: templates/js/translated/order.js:3447
+#: templates/js/translated/order.js:3604
msgid "Update Unit Price"
msgstr ""
-#: templates/js/translated/order.js:3461
+#: templates/js/translated/order.js:3618
msgid "No matching line items"
msgstr ""
-#: templates/js/translated/order.js:3697
+#: templates/js/translated/order.js:3854
msgid "No matching lines"
msgstr ""
@@ -9486,7 +9507,7 @@ msgstr ""
msgid "Add Stock"
msgstr ""
-#: templates/js/translated/stock.js:887 users/models.py:218
+#: templates/js/translated/stock.js:887 users/models.py:216
msgid "Add"
msgstr ""
@@ -10201,58 +10222,59 @@ msgstr ""
msgid "No"
msgstr ""
-#: users/admin.py:62
+#: users/admin.py:61
msgid "Users"
msgstr ""
-#: users/admin.py:63
+#: users/admin.py:62
msgid "Select which users are assigned to this group"
msgstr ""
-#: users/admin.py:185
+#: users/admin.py:184
msgid "The following users are members of multiple groups:"
msgstr ""
-#: users/admin.py:208
+#: users/admin.py:207
msgid "Personal info"
msgstr ""
-#: users/admin.py:209
+#: users/admin.py:208
msgid "Permissions"
msgstr ""
-#: users/admin.py:212
+#: users/admin.py:211
msgid "Important dates"
msgstr ""
-#: users/models.py:205
+#: users/models.py:203
msgid "Permission set"
msgstr ""
-#: users/models.py:213
+#: users/models.py:211
msgid "Group"
msgstr ""
-#: users/models.py:216
+#: users/models.py:214
msgid "View"
msgstr ""
-#: users/models.py:216
+#: users/models.py:214
msgid "Permission to view items"
msgstr ""
-#: users/models.py:218
+#: users/models.py:216
msgid "Permission to add items"
msgstr ""
-#: users/models.py:220
+#: users/models.py:218
msgid "Change"
msgstr ""
-#: users/models.py:220
+#: users/models.py:218
msgid "Permissions to edit items"
msgstr ""
-#: users/models.py:222
+#: users/models.py:220
msgid "Permission to delete items"
msgstr ""
+
diff --git a/InvenTree/locale/zh/LC_MESSAGES/django.po b/InvenTree/locale/zh/LC_MESSAGES/django.po
index 25e2022999..bbebdd8700 100644
--- a/InvenTree/locale/zh/LC_MESSAGES/django.po
+++ b/InvenTree/locale/zh/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-05-20 10:47+0000\n"
-"PO-Revision-Date: 2022-05-21 01:06\n"
+"POT-Creation-Date: 2022-05-23 23:24+0000\n"
+"PO-Revision-Date: 2022-05-24 01:42\n"
"Last-Translator: \n"
"Language-Team: Chinese Simplified\n"
"Language: zh_CN\n"
@@ -17,20 +17,20 @@ msgstr ""
"X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 154\n"
-#: InvenTree/api.py:50
+#: InvenTree/api.py:49
msgid "API endpoint not found"
msgstr "未找到 API 端点"
-#: InvenTree/exceptions.py:47
+#: InvenTree/exceptions.py:46
msgid "Error details can be found in the admin panel"
msgstr ""
-#: InvenTree/fields.py:98
+#: InvenTree/fields.py:96
msgid "Enter date"
msgstr "输入日期"
#: InvenTree/forms.py:124 templates/account/email_confirm.html:20
-#: templates/js/translated/forms.js:615
+#: templates/js/translated/forms.js:620
msgid "Confirm"
msgstr "确认"
@@ -79,7 +79,7 @@ msgstr "您必须输入相同的 Email 。"
msgid "Duplicate serial: {sn}"
msgstr ""
-#: InvenTree/helpers.py:456 order/models.py:311 order/models.py:465
+#: InvenTree/helpers.py:456 order/models.py:307 order/models.py:461
msgid "Invalid quantity provided"
msgstr "提供的数量无效"
@@ -116,89 +116,89 @@ msgstr "未找到序列号"
msgid "Number of unique serial numbers ({s}) must match quantity ({q})"
msgstr ""
-#: InvenTree/models.py:183
+#: InvenTree/models.py:181
msgid "Missing file"
msgstr "缺少文件"
-#: InvenTree/models.py:184
+#: InvenTree/models.py:182
msgid "Missing external link"
msgstr ""
-#: InvenTree/models.py:195 stock/models.py:2211
+#: InvenTree/models.py:193 stock/models.py:2202
#: templates/js/translated/attachment.js:119
msgid "Attachment"
msgstr "附件"
-#: InvenTree/models.py:196
+#: InvenTree/models.py:194
msgid "Select file to attach"
msgstr "选择附件"
-#: InvenTree/models.py:202 company/models.py:129 company/models.py:343
-#: company/models.py:575 order/models.py:136 part/models.py:867
+#: InvenTree/models.py:200 company/models.py:123 company/models.py:337
+#: company/models.py:569 order/models.py:132 part/models.py:855
#: report/templates/report/inventree_build_order_base.html:165
#: templates/js/translated/company.js:540
#: templates/js/translated/company.js:829 templates/js/translated/part.js:1441
msgid "Link"
msgstr "链接"
-#: InvenTree/models.py:203 build/models.py:330 part/models.py:868
-#: stock/models.py:674
+#: InvenTree/models.py:201 build/models.py:330 part/models.py:856
+#: stock/models.py:665
msgid "Link to external URL"
msgstr "链接到外部 URL"
-#: InvenTree/models.py:206 templates/js/translated/attachment.js:163
+#: InvenTree/models.py:204 templates/js/translated/attachment.js:163
msgid "Comment"
msgstr "注释"
-#: InvenTree/models.py:206
+#: InvenTree/models.py:204
msgid "File comment"
msgstr "文件注释"
-#: InvenTree/models.py:212 InvenTree/models.py:213 common/models.py:1571
-#: common/models.py:1572 common/models.py:1806 common/models.py:1807
-#: common/models.py:2034 common/models.py:2035 part/models.py:2369
-#: part/models.py:2389 plugin/models.py:261 plugin/models.py:262
+#: InvenTree/models.py:210 InvenTree/models.py:211 common/models.py:1567
+#: common/models.py:1568 common/models.py:1802 common/models.py:1803
+#: common/models.py:2030 common/models.py:2031 part/models.py:2357
+#: part/models.py:2377 plugin/models.py:260 plugin/models.py:261
#: report/templates/report/inventree_test_report_base.html:96
#: templates/js/translated/stock.js:2518
msgid "User"
msgstr "用户"
-#: InvenTree/models.py:216
+#: InvenTree/models.py:214
msgid "upload date"
msgstr "上传日期"
-#: InvenTree/models.py:239
+#: InvenTree/models.py:237
msgid "Filename must not be empty"
msgstr "文件名不能为空!"
-#: InvenTree/models.py:262
+#: InvenTree/models.py:260
msgid "Invalid attachment directory"
msgstr "非法的附件目录"
-#: InvenTree/models.py:272
+#: InvenTree/models.py:270
#, python-brace-format
msgid "Filename contains illegal character '{c}'"
msgstr "文件名包含非法字符 '{c}'"
-#: InvenTree/models.py:275
+#: InvenTree/models.py:273
msgid "Filename missing extension"
msgstr "缺少文件名扩展"
-#: InvenTree/models.py:282
+#: InvenTree/models.py:280
msgid "Attachment with this filename already exists"
msgstr "使用此文件名的附件已存在"
-#: InvenTree/models.py:289
+#: InvenTree/models.py:287
msgid "Error renaming file"
msgstr "重命名文件出错"
-#: InvenTree/models.py:324
+#: InvenTree/models.py:322
msgid "Invalid choice"
msgstr "选择无效"
-#: InvenTree/models.py:340 InvenTree/models.py:341 common/models.py:1792
-#: company/models.py:426 label/models.py:109 part/models.py:811
-#: part/models.py:2553 plugin/models.py:100 report/models.py:174
+#: InvenTree/models.py:338 InvenTree/models.py:339 common/models.py:1788
+#: company/models.py:420 label/models.py:104 part/models.py:799
+#: part/models.py:2541 plugin/models.py:99 report/models.py:169
#: templates/InvenTree/notifications/notifications.html:84
#: templates/InvenTree/settings/mixins/urls.html:13
#: templates/InvenTree/settings/plugin.html:49
@@ -211,23 +211,23 @@ msgstr "选择无效"
msgid "Name"
msgstr "名称"
-#: InvenTree/models.py:347 build/models.py:207
-#: build/templates/build/detail.html:24 company/models.py:349
-#: company/models.py:581 company/templates/company/company_base.html:71
+#: InvenTree/models.py:345 build/models.py:207
+#: build/templates/build/detail.html:24 company/models.py:343
+#: company/models.py:575 company/templates/company/company_base.html:71
#: company/templates/company/manufacturer_part.html:75
-#: company/templates/company/supplier_part.html:73 label/models.py:116
-#: order/models.py:134 part/models.py:834 part/templates/part/category.html:74
+#: company/templates/company/supplier_part.html:73 label/models.py:111
+#: order/models.py:130 part/models.py:822 part/templates/part/category.html:74
#: part/templates/part/part_base.html:167
-#: part/templates/part/set_category.html:14 report/models.py:187
-#: report/models.py:552 report/models.py:591
+#: part/templates/part/set_category.html:14 report/models.py:182
+#: report/models.py:547 report/models.py:586
#: report/templates/report/inventree_build_order_base.html:118
#: stock/templates/stock/location.html:103
#: templates/InvenTree/settings/plugin_settings.html:33
#: templates/js/translated/bom.js:553 templates/js/translated/bom.js:872
#: templates/js/translated/build.js:2408 templates/js/translated/company.js:345
#: templates/js/translated/company.js:551
-#: templates/js/translated/company.js:840 templates/js/translated/order.js:1456
-#: templates/js/translated/order.js:1664 templates/js/translated/order.js:2148
+#: templates/js/translated/company.js:840 templates/js/translated/order.js:1562
+#: templates/js/translated/order.js:1770 templates/js/translated/order.js:2254
#: templates/js/translated/part.js:674 templates/js/translated/part.js:1082
#: templates/js/translated/part.js:1355 templates/js/translated/part.js:1755
#: templates/js/translated/part.js:1824 templates/js/translated/stock.js:1686
@@ -235,173 +235,173 @@ msgstr "名称"
msgid "Description"
msgstr "描述信息"
-#: InvenTree/models.py:348
+#: InvenTree/models.py:346
msgid "Description (optional)"
msgstr "描述 (可选)"
-#: InvenTree/models.py:356
+#: InvenTree/models.py:354
msgid "parent"
msgstr "上级项"
-#: InvenTree/serializers.py:62 part/models.py:2886
+#: InvenTree/serializers.py:59 part/models.py:2874
msgid "Must be a valid number"
msgstr "必须是有效数字"
-#: InvenTree/serializers.py:296
+#: InvenTree/serializers.py:293
msgid "Filename"
msgstr "文件名"
-#: InvenTree/serializers.py:331
+#: InvenTree/serializers.py:328
msgid "Invalid value"
msgstr ""
-#: InvenTree/serializers.py:352
+#: InvenTree/serializers.py:349
msgid "Data File"
msgstr ""
-#: InvenTree/serializers.py:353
+#: InvenTree/serializers.py:350
msgid "Select data file for upload"
msgstr ""
-#: InvenTree/serializers.py:377
+#: InvenTree/serializers.py:374
msgid "Unsupported file type"
msgstr ""
-#: InvenTree/serializers.py:383
+#: InvenTree/serializers.py:380
msgid "File is too large"
msgstr ""
-#: InvenTree/serializers.py:404
+#: InvenTree/serializers.py:401
msgid "No columns found in file"
msgstr ""
-#: InvenTree/serializers.py:407
+#: InvenTree/serializers.py:404
msgid "No data rows found in file"
msgstr ""
-#: InvenTree/serializers.py:533
+#: InvenTree/serializers.py:530
msgid "No data rows provided"
msgstr ""
-#: InvenTree/serializers.py:536
+#: InvenTree/serializers.py:533
msgid "No data columns supplied"
msgstr ""
-#: InvenTree/serializers.py:623
+#: InvenTree/serializers.py:620
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr ""
-#: InvenTree/serializers.py:632
+#: InvenTree/serializers.py:629
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr ""
-#: InvenTree/settings.py:672
+#: InvenTree/settings.py:669
msgid "Czech"
msgstr ""
-#: InvenTree/settings.py:673
+#: InvenTree/settings.py:670
msgid "German"
msgstr "德语"
-#: InvenTree/settings.py:674
+#: InvenTree/settings.py:671
msgid "Greek"
msgstr "希腊语"
-#: InvenTree/settings.py:675
+#: InvenTree/settings.py:672
msgid "English"
msgstr "英语"
-#: InvenTree/settings.py:676
+#: InvenTree/settings.py:673
msgid "Spanish"
msgstr "西班牙语"
-#: InvenTree/settings.py:677
+#: InvenTree/settings.py:674
msgid "Spanish (Mexican)"
msgstr ""
-#: InvenTree/settings.py:678
+#: InvenTree/settings.py:675
msgid "Farsi / Persian"
msgstr ""
-#: InvenTree/settings.py:679
+#: InvenTree/settings.py:676
msgid "French"
msgstr "法语"
-#: InvenTree/settings.py:680
+#: InvenTree/settings.py:677
msgid "Hebrew"
msgstr "希伯来语"
-#: InvenTree/settings.py:681
+#: InvenTree/settings.py:678
msgid "Hungarian"
msgstr ""
-#: InvenTree/settings.py:682
+#: InvenTree/settings.py:679
msgid "Italian"
msgstr "意大利语"
-#: InvenTree/settings.py:683
+#: InvenTree/settings.py:680
msgid "Japanese"
msgstr "日语"
-#: InvenTree/settings.py:684
+#: InvenTree/settings.py:681
msgid "Korean"
msgstr "韩语"
-#: InvenTree/settings.py:685
+#: InvenTree/settings.py:682
msgid "Dutch"
msgstr "荷兰语"
-#: InvenTree/settings.py:686
+#: InvenTree/settings.py:683
msgid "Norwegian"
msgstr "挪威语"
-#: InvenTree/settings.py:687
+#: InvenTree/settings.py:684
msgid "Polish"
msgstr "波兰语"
-#: InvenTree/settings.py:688
+#: InvenTree/settings.py:685
msgid "Portuguese"
msgstr ""
-#: InvenTree/settings.py:689
+#: InvenTree/settings.py:686
msgid "Portuguese (Brazilian)"
msgstr ""
-#: InvenTree/settings.py:690
+#: InvenTree/settings.py:687
msgid "Russian"
msgstr "俄语"
-#: InvenTree/settings.py:691
+#: InvenTree/settings.py:688
msgid "Swedish"
msgstr "瑞典语"
-#: InvenTree/settings.py:692
+#: InvenTree/settings.py:689
msgid "Thai"
msgstr "泰语"
-#: InvenTree/settings.py:693
+#: InvenTree/settings.py:690
msgid "Turkish"
msgstr "土耳其语"
-#: InvenTree/settings.py:694
+#: InvenTree/settings.py:691
msgid "Vietnamese"
msgstr "越南语"
-#: InvenTree/settings.py:695
+#: InvenTree/settings.py:692
msgid "Chinese"
msgstr "中文(简体)"
-#: InvenTree/status.py:110
+#: InvenTree/status.py:108
msgid "Background worker check failed"
msgstr "后台工作人员检查失败"
-#: InvenTree/status.py:114
+#: InvenTree/status.py:112
msgid "Email backend not configured"
msgstr "未配置电子邮件后端"
-#: InvenTree/status.py:117
+#: InvenTree/status.py:115
msgid "InvenTree system health checks failed"
msgstr "InventTree系统健康检查失败"
@@ -416,7 +416,7 @@ msgstr "已添加"
#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:326
#: order/templates/order/order_base.html:134
-#: order/templates/order/sales_order_base.html:132
+#: order/templates/order/sales_order_base.html:133
msgid "Complete"
msgstr "完成"
@@ -435,8 +435,8 @@ msgstr "丢失"
msgid "Returned"
msgstr "已退回"
-#: InvenTree/status_codes.py:143 order/models.py:1087
-#: templates/js/translated/order.js:2871 templates/js/translated/order.js:3188
+#: InvenTree/status_codes.py:143 order/models.py:1083
+#: templates/js/translated/order.js:3026 templates/js/translated/order.js:3343
msgid "Shipped"
msgstr "已发货"
@@ -552,63 +552,63 @@ msgstr "收到定购单"
msgid "Production"
msgstr "生产中"
-#: InvenTree/validators.py:25
+#: InvenTree/validators.py:23
msgid "Not a valid currency code"
msgstr "不是有效的货币代码"
-#: InvenTree/validators.py:53
+#: InvenTree/validators.py:51
msgid "Invalid character in part name"
msgstr "商品名称中存在无效字符"
-#: InvenTree/validators.py:66
+#: InvenTree/validators.py:64
#, python-brace-format
msgid "IPN must match regex pattern {pat}"
msgstr "IPN 必须匹配正则表达式 {pat}"
-#: InvenTree/validators.py:80 InvenTree/validators.py:94
-#: InvenTree/validators.py:108
+#: InvenTree/validators.py:78 InvenTree/validators.py:92
+#: InvenTree/validators.py:106
#, python-brace-format
msgid "Reference must match pattern {pattern}"
msgstr "引用必须匹配模板 {pattern}"
-#: InvenTree/validators.py:116
+#: InvenTree/validators.py:114
#, python-brace-format
msgid "Illegal character in name ({x})"
msgstr "名称中存在非法字符 ({x})"
-#: InvenTree/validators.py:137 InvenTree/validators.py:153
+#: InvenTree/validators.py:135 InvenTree/validators.py:151
msgid "Overage value must not be negative"
msgstr "备损值不能为负数"
-#: InvenTree/validators.py:155
+#: InvenTree/validators.py:153
msgid "Overage must not exceed 100%"
msgstr "备损不能超过 100%"
-#: InvenTree/validators.py:162
+#: InvenTree/validators.py:160
msgid "Invalid value for overage"
msgstr ""
-#: InvenTree/views.py:535
+#: InvenTree/views.py:534
msgid "Delete Item"
msgstr "删除项"
-#: InvenTree/views.py:584
+#: InvenTree/views.py:583
msgid "Check box to confirm item deletion"
msgstr "选中方框以确认项目删除"
-#: InvenTree/views.py:599 templates/InvenTree/settings/user.html:22
+#: InvenTree/views.py:598 templates/InvenTree/settings/user.html:22
msgid "Edit User Information"
msgstr "编辑用户信息"
-#: InvenTree/views.py:610 templates/InvenTree/settings/user.html:19
+#: InvenTree/views.py:609 templates/InvenTree/settings/user.html:19
msgid "Set Password"
msgstr "设置密码"
-#: InvenTree/views.py:629
+#: InvenTree/views.py:628
msgid "Password fields must match"
msgstr "密码字段必须相匹配。"
-#: InvenTree/views.py:876 templates/navbar.html:152
+#: InvenTree/views.py:875 templates/navbar.html:152
msgid "System Information"
msgstr "系统信息"
@@ -629,7 +629,7 @@ msgstr "生产订单"
#: order/templates/order/so_sidebar.html:13
#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221
#: templates/InvenTree/search.html:139
-#: templates/InvenTree/settings/sidebar.html:45 users/models.py:44
+#: templates/InvenTree/settings/sidebar.html:45 users/models.py:42
msgid "Build Orders"
msgstr "生产订单"
@@ -637,15 +637,15 @@ msgstr "生产订单"
msgid "Build Order Reference"
msgstr "相关生产订单"
-#: build/models.py:199 order/models.py:241 order/models.py:593
-#: order/models.py:888 part/models.py:2797
+#: build/models.py:199 order/models.py:237 order/models.py:589
+#: order/models.py:884 part/models.py:2785
#: part/templates/part/upload_bom.html:54
#: report/templates/report/inventree_po_report.html:91
#: report/templates/report/inventree_so_report.html:92
#: templates/js/translated/bom.js:688 templates/js/translated/bom.js:879
-#: templates/js/translated/build.js:1794 templates/js/translated/order.js:1695
-#: templates/js/translated/order.js:1896 templates/js/translated/order.js:3055
-#: templates/js/translated/order.js:3538
+#: templates/js/translated/build.js:1794 templates/js/translated/order.js:1801
+#: templates/js/translated/order.js:2002 templates/js/translated/order.js:3210
+#: templates/js/translated/order.js:3695
msgid "Reference"
msgstr "引用"
@@ -663,12 +663,12 @@ msgid "BuildOrder to which this build is allocated"
msgstr "此次生产匹配的订单"
#: build/models.py:225 build/templates/build/build_base.html:77
-#: build/templates/build/detail.html:29 company/models.py:717
-#: order/models.py:987 order/models.py:1076 part/models.py:366
-#: part/models.py:2315 part/models.py:2331 part/models.py:2350
-#: part/models.py:2367 part/models.py:2469 part/models.py:2591
-#: part/models.py:2681 part/models.py:2772 part/models.py:3062
-#: part/serializers.py:922 part/templates/part/part_app_base.html:8
+#: build/templates/build/detail.html:29 company/models.py:711
+#: order/models.py:983 order/models.py:1072 part/models.py:354
+#: part/models.py:2303 part/models.py:2319 part/models.py:2338
+#: part/models.py:2355 part/models.py:2457 part/models.py:2579
+#: part/models.py:2669 part/models.py:2760 part/models.py:3050
+#: part/serializers.py:917 part/templates/part/part_app_base.html:8
#: part/templates/part/part_pricing.html:12
#: part/templates/part/set_category.html:13
#: part/templates/part/upload_bom.html:52
@@ -683,10 +683,10 @@ msgstr "此次生产匹配的订单"
#: templates/js/translated/build.js:1158 templates/js/translated/build.js:1664
#: templates/js/translated/build.js:2100 templates/js/translated/build.js:2413
#: templates/js/translated/company.js:492
-#: templates/js/translated/company.js:749 templates/js/translated/order.js:93
-#: templates/js/translated/order.js:762 templates/js/translated/order.js:1194
-#: templates/js/translated/order.js:1649 templates/js/translated/order.js:2475
-#: templates/js/translated/order.js:2824 templates/js/translated/order.js:3039
+#: templates/js/translated/company.js:749 templates/js/translated/order.js:94
+#: templates/js/translated/order.js:868 templates/js/translated/order.js:1300
+#: templates/js/translated/order.js:1755 templates/js/translated/order.js:2581
+#: templates/js/translated/order.js:2979 templates/js/translated/order.js:3194
#: templates/js/translated/part.js:1067 templates/js/translated/part.js:1137
#: templates/js/translated/part.js:1333 templates/js/translated/stock.js:531
#: templates/js/translated/stock.js:696 templates/js/translated/stock.js:903
@@ -708,7 +708,7 @@ msgid "SalesOrder to which this build is allocated"
msgstr "此次生产匹配的销售订单"
#: build/models.py:247 build/serializers.py:790
-#: templates/js/translated/build.js:2088 templates/js/translated/order.js:2463
+#: templates/js/translated/build.js:2088 templates/js/translated/order.js:2569
msgid "Source Location"
msgstr "来源地点"
@@ -748,8 +748,8 @@ msgstr "生产状态"
msgid "Build status code"
msgstr "生产状态代码"
-#: build/models.py:285 build/serializers.py:220 order/serializers.py:445
-#: stock/models.py:678 templates/js/translated/order.js:1054
+#: build/models.py:285 build/serializers.py:220 order/serializers.py:440
+#: stock/models.py:669 templates/js/translated/order.js:1160
msgid "Batch Code"
msgstr "批量代码"
@@ -757,12 +757,12 @@ msgstr "批量代码"
msgid "Batch code for this build output"
msgstr "此生产产出的批量代码"
-#: build/models.py:292 order/models.py:138 part/models.py:1006
-#: part/templates/part/part_base.html:305 templates/js/translated/order.js:2161
+#: build/models.py:292 order/models.py:134 part/models.py:994
+#: part/templates/part/part_base.html:305 templates/js/translated/order.js:2267
msgid "Creation Date"
msgstr "创建日期"
-#: build/models.py:296 order/models.py:615
+#: build/models.py:296 order/models.py:611
msgid "Target completion date"
msgstr "预计完成日期"
@@ -770,7 +770,7 @@ msgstr "预计完成日期"
msgid "Target date for build completion. Build will be overdue after this date."
msgstr "生产完成的目标日期。生产将在此日期之后逾期。"
-#: build/models.py:300 order/models.py:284
+#: build/models.py:300 order/models.py:280
#: templates/js/translated/build.js:2490
msgid "Completion Date"
msgstr "完成日期:"
@@ -788,11 +788,11 @@ msgid "User who issued this build order"
msgstr "发布此生产订单的用户"
#: build/models.py:323 build/templates/build/build_base.html:190
-#: build/templates/build/detail.html:115 order/models.py:152
+#: build/templates/build/detail.html:115 order/models.py:148
#: order/templates/order/order_base.html:176
-#: order/templates/order/sales_order_base.html:182 part/models.py:1010
+#: order/templates/order/sales_order_base.html:183 part/models.py:998
#: report/templates/report/inventree_build_order_base.html:159
-#: templates/js/translated/build.js:2470 templates/js/translated/order.js:1490
+#: templates/js/translated/build.js:2470 templates/js/translated/order.js:1596
msgid "Responsible"
msgstr "责任人"
@@ -803,27 +803,27 @@ msgstr "负责此生产订单的用户"
#: build/models.py:329 build/templates/build/detail.html:101
#: company/templates/company/manufacturer_part.html:107
#: company/templates/company/supplier_part.html:132
-#: part/templates/part/part_base.html:346 stock/models.py:672
+#: part/templates/part/part_base.html:346 stock/models.py:663
#: stock/templates/stock/item_base.html:363
msgid "External Link"
msgstr "外部链接"
#: build/models.py:334 build/serializers.py:390
-#: build/templates/build/sidebar.html:21 company/models.py:140
-#: company/models.py:588 company/templates/company/sidebar.html:25
-#: order/models.py:156 order/models.py:890 order/models.py:1197
+#: build/templates/build/sidebar.html:21 company/models.py:134
+#: company/models.py:582 company/templates/company/sidebar.html:25
+#: order/models.py:152 order/models.py:886 order/models.py:1193
#: order/templates/order/po_sidebar.html:11
-#: order/templates/order/so_sidebar.html:17 part/models.py:995
+#: order/templates/order/so_sidebar.html:17 part/models.py:983
#: part/templates/part/part_sidebar.html:59
#: report/templates/report/inventree_build_order_base.html:173
-#: stock/models.py:745 stock/models.py:2111 stock/models.py:2217
-#: stock/serializers.py:329 stock/serializers.py:467 stock/serializers.py:736
-#: stock/serializers.py:834 stock/serializers.py:966
+#: stock/models.py:736 stock/models.py:2102 stock/models.py:2208
+#: stock/serializers.py:321 stock/serializers.py:459 stock/serializers.py:728
+#: stock/serializers.py:826 stock/serializers.py:958
#: stock/templates/stock/stock_sidebar.html:25
#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1065
-#: templates/js/translated/company.js:845 templates/js/translated/order.js:1816
-#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2344
-#: templates/js/translated/order.js:3213 templates/js/translated/order.js:3609
+#: templates/js/translated/company.js:845 templates/js/translated/order.js:1922
+#: templates/js/translated/order.js:2073 templates/js/translated/order.js:2450
+#: templates/js/translated/order.js:3368 templates/js/translated/order.js:3766
#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1922
msgid "Notes"
msgstr "备注"
@@ -857,7 +857,7 @@ msgstr ""
msgid "Stock item is over-allocated"
msgstr "库存物品分配过度!"
-#: build/models.py:1238 order/models.py:1324
+#: build/models.py:1238 order/models.py:1329
msgid "Allocation quantity must be greater than zero"
msgstr "分配数量必须大于0"
@@ -879,16 +879,16 @@ msgstr "生产"
msgid "Build to allocate parts"
msgstr ""
-#: build/models.py:1392 build/serializers.py:631 order/serializers.py:958
-#: order/serializers.py:976 stock/serializers.py:401 stock/serializers.py:674
-#: stock/serializers.py:792 stock/templates/stock/item_base.html:10
+#: build/models.py:1392 build/serializers.py:631 order/serializers.py:961
+#: order/serializers.py:979 stock/serializers.py:393 stock/serializers.py:666
+#: stock/serializers.py:784 stock/templates/stock/item_base.html:10
#: stock/templates/stock/item_base.html:23
#: stock/templates/stock/item_base.html:357
#: templates/js/translated/build.js:738 templates/js/translated/build.js:743
#: templates/js/translated/build.js:2102 templates/js/translated/build.js:2538
-#: templates/js/translated/order.js:94 templates/js/translated/order.js:2476
-#: templates/js/translated/order.js:2731 templates/js/translated/order.js:2736
-#: templates/js/translated/order.js:2831 templates/js/translated/order.js:2921
+#: templates/js/translated/order.js:95 templates/js/translated/order.js:2582
+#: templates/js/translated/order.js:2886 templates/js/translated/order.js:2891
+#: templates/js/translated/order.js:2986 templates/js/translated/order.js:3076
#: templates/js/translated/stock.js:532 templates/js/translated/stock.js:697
#: templates/js/translated/stock.js:2454
msgid "Stock Item"
@@ -900,11 +900,11 @@ msgstr "源库存项"
#: build/models.py:1405 build/serializers.py:190
#: build/templates/build/build_base.html:82
-#: build/templates/build/detail.html:34 common/models.py:1614
-#: company/forms.py:39 company/templates/company/supplier_part.html:258
-#: order/models.py:881 order/models.py:1364 order/serializers.py:1097
-#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:123
-#: part/forms.py:139 part/forms.py:155 part/models.py:2788
+#: build/templates/build/detail.html:34 common/models.py:1610
+#: company/forms.py:38 company/templates/company/supplier_part.html:258
+#: order/models.py:877 order/models.py:1369 order/serializers.py:1100
+#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:121
+#: part/forms.py:137 part/forms.py:153 part/models.py:2776
#: part/templates/part/detail.html:953 part/templates/part/detail.html:1039
#: part/templates/part/part_pricing.html:16
#: part/templates/part/upload_bom.html:53
@@ -913,7 +913,7 @@ msgstr "源库存项"
#: report/templates/report/inventree_so_report.html:91
#: report/templates/report/inventree_test_report_base.html:81
#: report/templates/report/inventree_test_report_base.html:139
-#: stock/serializers.py:290 stock/templates/stock/item_base.html:187
+#: stock/serializers.py:282 stock/templates/stock/item_base.html:187
#: stock/templates/stock/item_base.html:252
#: stock/templates/stock/item_base.html:260
#: templates/js/translated/barcode.js:437 templates/js/translated/bom.js:689
@@ -922,11 +922,11 @@ msgstr "源库存项"
#: templates/js/translated/build.js:1180 templates/js/translated/build.js:1690
#: templates/js/translated/build.js:2103
#: templates/js/translated/model_renderers.js:108
-#: templates/js/translated/order.js:110 templates/js/translated/order.js:765
-#: templates/js/translated/order.js:1701 templates/js/translated/order.js:1902
-#: templates/js/translated/order.js:2477 templates/js/translated/order.js:2750
-#: templates/js/translated/order.js:2838 templates/js/translated/order.js:2927
-#: templates/js/translated/order.js:3061 templates/js/translated/order.js:3544
+#: templates/js/translated/order.js:111 templates/js/translated/order.js:871
+#: templates/js/translated/order.js:1807 templates/js/translated/order.js:2008
+#: templates/js/translated/order.js:2583 templates/js/translated/order.js:2905
+#: templates/js/translated/order.js:2993 templates/js/translated/order.js:3082
+#: templates/js/translated/order.js:3216 templates/js/translated/order.js:3701
#: templates/js/translated/part.js:967 templates/js/translated/part.js:1969
#: templates/js/translated/part.js:2200 templates/js/translated/part.js:2234
#: templates/js/translated/part.js:2312 templates/js/translated/stock.js:403
@@ -972,10 +972,10 @@ msgstr ""
msgid "Enter quantity for build output"
msgstr "输入生产产出数量"
-#: build/serializers.py:203 build/serializers.py:651 order/models.py:309
-#: order/serializers.py:294 order/serializers.py:440 part/serializers.py:593
-#: part/serializers.py:1089 stock/models.py:505 stock/models.py:1316
-#: stock/serializers.py:302
+#: build/serializers.py:203 build/serializers.py:651 order/models.py:305
+#: order/serializers.py:289 order/serializers.py:435 part/serializers.py:588
+#: part/serializers.py:1084 stock/models.py:496 stock/models.py:1307
+#: stock/serializers.py:294
msgid "Quantity must be greater than zero"
msgstr ""
@@ -987,8 +987,8 @@ msgstr ""
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:227 order/serializers.py:453 order/serializers.py:1101
-#: stock/serializers.py:311 templates/js/translated/order.js:1065
+#: build/serializers.py:227 order/serializers.py:448 order/serializers.py:1104
+#: stock/serializers.py:303 templates/js/translated/order.js:1171
#: templates/js/translated/stock.js:238 templates/js/translated/stock.js:404
msgid "Serial Numbers"
msgstr "序列号"
@@ -1005,7 +1005,7 @@ msgstr ""
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:276 stock/api.py:602
+#: build/serializers.py:276 stock/api.py:590
msgid "The following serial numbers already exist"
msgstr ""
@@ -1013,14 +1013,14 @@ msgstr ""
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:372 order/serializers.py:426 order/serializers.py:531
-#: stock/serializers.py:322 stock/serializers.py:462 stock/serializers.py:827
-#: stock/serializers.py:1068 stock/templates/stock/item_base.html:303
+#: build/serializers.py:372 order/serializers.py:421 order/serializers.py:526
+#: stock/serializers.py:314 stock/serializers.py:454 stock/serializers.py:819
+#: stock/serializers.py:1060 stock/templates/stock/item_base.html:303
#: templates/js/translated/barcode.js:436
#: templates/js/translated/barcode.js:618 templates/js/translated/build.js:750
-#: templates/js/translated/build.js:1702 templates/js/translated/order.js:1092
-#: templates/js/translated/order.js:2743 templates/js/translated/order.js:2846
-#: templates/js/translated/order.js:2854 templates/js/translated/order.js:2935
+#: templates/js/translated/build.js:1702 templates/js/translated/order.js:1198
+#: templates/js/translated/order.js:2898 templates/js/translated/order.js:3001
+#: templates/js/translated/order.js:3009 templates/js/translated/order.js:3090
#: templates/js/translated/part.js:180 templates/js/translated/stock.js:533
#: templates/js/translated/stock.js:698 templates/js/translated/stock.js:905
#: templates/js/translated/stock.js:1793 templates/js/translated/stock.js:2395
@@ -1032,11 +1032,11 @@ msgid "Location for completed build outputs"
msgstr ""
#: build/serializers.py:379 build/templates/build/build_base.html:142
-#: build/templates/build/detail.html:62 order/models.py:609
-#: order/serializers.py:463 stock/templates/stock/item_base.html:193
+#: build/templates/build/detail.html:62 order/models.py:605
+#: order/serializers.py:458 stock/templates/stock/item_base.html:193
#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2442
-#: templates/js/translated/order.js:1199 templates/js/translated/order.js:1460
-#: templates/js/translated/order.js:2153 templates/js/translated/stock.js:1768
+#: templates/js/translated/order.js:1305 templates/js/translated/order.js:1566
+#: templates/js/translated/order.js:2259 templates/js/translated/stock.js:1768
#: templates/js/translated/stock.js:2472 templates/js/translated/stock.js:2604
msgid "Status"
msgstr "状态"
@@ -1097,8 +1097,8 @@ msgstr ""
msgid "No build outputs have been created for this build order"
msgstr ""
-#: build/serializers.py:556 build/serializers.py:605 part/models.py:2912
-#: part/models.py:3054
+#: build/serializers.py:556 build/serializers.py:605 part/models.py:2900
+#: part/models.py:3042
msgid "BOM Item"
msgstr ""
@@ -1114,11 +1114,11 @@ msgstr ""
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:637 stock/serializers.py:681
+#: build/serializers.py:637 stock/serializers.py:673
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:694 order/serializers.py:1009
+#: build/serializers.py:694 order/serializers.py:1012
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
@@ -1135,7 +1135,7 @@ msgstr ""
msgid "This stock item has already been allocated to this build output"
msgstr ""
-#: build/serializers.py:739 order/serializers.py:1271
+#: build/serializers.py:739 order/serializers.py:1274
msgid "Allocation items must be provided"
msgstr ""
@@ -1233,13 +1233,13 @@ msgid "Stock has not been fully allocated to this Build Order"
msgstr ""
#: build/templates/build/build_base.html:151
-#: build/templates/build/detail.html:131 order/models.py:894
+#: build/templates/build/detail.html:131 order/models.py:890
#: order/templates/order/order_base.html:162
-#: order/templates/order/sales_order_base.html:163
+#: order/templates/order/sales_order_base.html:164
#: report/templates/report/inventree_build_order_base.html:126
-#: templates/js/translated/build.js:2482 templates/js/translated/order.js:1477
-#: templates/js/translated/order.js:1763 templates/js/translated/order.js:2169
-#: templates/js/translated/order.js:3124 templates/js/translated/part.js:971
+#: templates/js/translated/build.js:2482 templates/js/translated/order.js:1583
+#: templates/js/translated/order.js:1869 templates/js/translated/order.js:2275
+#: templates/js/translated/order.js:3279 templates/js/translated/part.js:971
msgid "Target Date"
msgstr "预计日期"
@@ -1251,7 +1251,7 @@ msgstr "此次生产的截止日期为 %(target)s"
#: build/templates/build/build_base.html:156
#: build/templates/build/build_base.html:201
#: order/templates/order/order_base.html:98
-#: order/templates/order/sales_order_base.html:93
+#: order/templates/order/sales_order_base.html:94
#: templates/js/translated/table_filters.js:312
#: templates/js/translated/table_filters.js:353
#: templates/js/translated/table_filters.js:383
@@ -1260,20 +1260,20 @@ msgstr "逾期"
#: build/templates/build/build_base.html:163
#: build/templates/build/detail.html:67 build/templates/build/detail.html:142
-#: order/templates/order/sales_order_base.html:170
+#: order/templates/order/sales_order_base.html:171
#: templates/js/translated/table_filters.js:392
msgid "Completed"
msgstr "已完成"
#: build/templates/build/build_base.html:176
-#: build/templates/build/detail.html:94 order/models.py:1073
-#: order/models.py:1169 order/models.py:1268
+#: build/templates/build/detail.html:94 order/models.py:1069
+#: order/models.py:1165 order/models.py:1273
#: order/templates/order/sales_order_base.html:9
#: order/templates/order/sales_order_base.html:28
#: report/templates/report/inventree_build_order_base.html:136
#: report/templates/report/inventree_so_report.html:77
#: stock/templates/stock/item_base.html:297
-#: templates/js/translated/order.js:2108
+#: templates/js/translated/order.js:2214
msgid "Sales Order"
msgstr "销售订单"
@@ -1308,8 +1308,8 @@ msgstr ""
msgid "Stock can be taken from any available location."
msgstr ""
-#: build/templates/build/detail.html:49 order/models.py:1009
-#: templates/js/translated/order.js:1200 templates/js/translated/order.js:1805
+#: build/templates/build/detail.html:49 order/models.py:1005
+#: templates/js/translated/order.js:1306 templates/js/translated/order.js:1911
msgid "Destination"
msgstr ""
@@ -1334,7 +1334,7 @@ msgstr ""
#: build/templates/build/detail.html:126
#: order/templates/order/order_base.html:149
-#: order/templates/order/sales_order_base.html:157
+#: order/templates/order/sales_order_base.html:158
#: templates/js/translated/build.js:2450
msgid "Created"
msgstr "已创建"
@@ -1386,7 +1386,7 @@ msgstr "订单所需部件"
#: build/templates/build/detail.html:187
#: company/templates/company/detail.html:37
#: company/templates/company/detail.html:84
-#: part/templates/part/category.html:177 templates/js/translated/order.js:805
+#: part/templates/part/category.html:177 templates/js/translated/order.js:911
msgid "Order Parts"
msgstr "订购商品"
@@ -1516,23 +1516,23 @@ msgstr ""
msgid "Delete Build Order"
msgstr "删除生产订单"
-#: common/files.py:65
+#: common/files.py:66
msgid "Unsupported file format: {ext.upper()}"
msgstr "不支持的文件格式: {ext.uper()}"
-#: common/files.py:67
+#: common/files.py:68
msgid "Error reading file (invalid encoding)"
msgstr ""
-#: common/files.py:72
+#: common/files.py:73
msgid "Error reading file (invalid format)"
msgstr ""
-#: common/files.py:74
+#: common/files.py:75
msgid "Error reading file (incorrect dimension)"
msgstr ""
-#: common/files.py:76
+#: common/files.py:77
msgid "Error reading file (data could be corrupted)"
msgstr ""
@@ -1553,888 +1553,888 @@ msgstr ""
msgid "Select {name} file to upload"
msgstr ""
-#: common/models.py:398
+#: common/models.py:394
msgid "Settings key (must be unique - case insensitive)"
msgstr ""
-#: common/models.py:400
+#: common/models.py:396
msgid "Settings value"
msgstr ""
-#: common/models.py:441
+#: common/models.py:437
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:461
+#: common/models.py:457
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:472
+#: common/models.py:468
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:521
+#: common/models.py:517
msgid "Key string must be unique"
msgstr ""
-#: common/models.py:743
+#: common/models.py:739
msgid "No group"
msgstr ""
-#: common/models.py:785
+#: common/models.py:781
msgid "Restart required"
msgstr ""
-#: common/models.py:786
+#: common/models.py:782
msgid "A setting has been changed which requires a server restart"
msgstr ""
-#: common/models.py:793
+#: common/models.py:789
msgid "Server Instance Name"
msgstr ""
-#: common/models.py:795
+#: common/models.py:791
msgid "String descriptor for the server instance"
msgstr ""
-#: common/models.py:799
+#: common/models.py:795
msgid "Use instance name"
msgstr ""
-#: common/models.py:800
+#: common/models.py:796
msgid "Use the instance name in the title-bar"
msgstr ""
-#: common/models.py:806
+#: common/models.py:802
msgid "Restrict showing `about`"
msgstr ""
-#: common/models.py:807
+#: common/models.py:803
msgid "Show the `about` modal only to superusers"
msgstr ""
-#: common/models.py:813 company/models.py:98 company/models.py:99
+#: common/models.py:809 company/models.py:92 company/models.py:93
msgid "Company name"
msgstr "公司名称"
-#: common/models.py:814
+#: common/models.py:810
msgid "Internal company name"
msgstr "内部公司名称"
-#: common/models.py:819
+#: common/models.py:815
msgid "Base URL"
msgstr ""
-#: common/models.py:820
+#: common/models.py:816
msgid "Base URL for server instance"
msgstr ""
-#: common/models.py:826
+#: common/models.py:822
msgid "Default Currency"
msgstr ""
-#: common/models.py:827
+#: common/models.py:823
msgid "Default currency"
msgstr ""
-#: common/models.py:833
+#: common/models.py:829
msgid "Download from URL"
msgstr ""
-#: common/models.py:834
+#: common/models.py:830
msgid "Allow download of remote images and files from external URL"
msgstr ""
-#: common/models.py:840 templates/InvenTree/settings/sidebar.html:33
+#: common/models.py:836 templates/InvenTree/settings/sidebar.html:33
msgid "Barcode Support"
msgstr ""
-#: common/models.py:841
+#: common/models.py:837
msgid "Enable barcode scanner support"
msgstr "启用条形码扫描支持"
-#: common/models.py:847
+#: common/models.py:843
msgid "Barcode Webcam Support"
msgstr ""
-#: common/models.py:848
+#: common/models.py:844
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/models.py:854
+#: common/models.py:850
msgid "IPN Regex"
msgstr ""
-#: common/models.py:855
+#: common/models.py:851
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/models.py:859
+#: common/models.py:855
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/models.py:860
+#: common/models.py:856
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/models.py:866
+#: common/models.py:862
msgid "Allow Editing IPN"
msgstr ""
-#: common/models.py:867
+#: common/models.py:863
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/models.py:873
+#: common/models.py:869
msgid "Copy Part BOM Data"
msgstr ""
-#: common/models.py:874
+#: common/models.py:870
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/models.py:880
+#: common/models.py:876
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/models.py:881
+#: common/models.py:877
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/models.py:887
+#: common/models.py:883
msgid "Copy Part Test Data"
msgstr ""
-#: common/models.py:888
+#: common/models.py:884
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/models.py:894
+#: common/models.py:890
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/models.py:895
+#: common/models.py:891
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/models.py:901 part/models.py:2593 report/models.py:180
+#: common/models.py:897 part/models.py:2581 report/models.py:175
#: templates/js/translated/table_filters.js:38
#: templates/js/translated/table_filters.js:444
msgid "Template"
msgstr "模板"
-#: common/models.py:902
+#: common/models.py:898
msgid "Parts are templates by default"
msgstr ""
-#: common/models.py:908 part/models.py:958 templates/js/translated/bom.js:1411
+#: common/models.py:904 part/models.py:946 templates/js/translated/bom.js:1411
#: templates/js/translated/table_filters.js:168
#: templates/js/translated/table_filters.js:460
msgid "Assembly"
msgstr "组装"
-#: common/models.py:909
+#: common/models.py:905
msgid "Parts can be assembled from other components by default"
msgstr ""
-#: common/models.py:915 part/models.py:964
+#: common/models.py:911 part/models.py:952
#: templates/js/translated/table_filters.js:464
msgid "Component"
msgstr "组件"
-#: common/models.py:916
+#: common/models.py:912
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/models.py:922 part/models.py:975
+#: common/models.py:918 part/models.py:963
msgid "Purchaseable"
msgstr "可购买"
-#: common/models.py:923
+#: common/models.py:919
msgid "Parts are purchaseable by default"
msgstr "商品默认可购买"
-#: common/models.py:929 part/models.py:980
+#: common/models.py:925 part/models.py:968
#: templates/js/translated/table_filters.js:472
msgid "Salable"
msgstr "可销售"
-#: common/models.py:930
+#: common/models.py:926
msgid "Parts are salable by default"
msgstr "商品默认可销售"
-#: common/models.py:936 part/models.py:970
+#: common/models.py:932 part/models.py:958
#: templates/js/translated/table_filters.js:46
#: templates/js/translated/table_filters.js:100
#: templates/js/translated/table_filters.js:476
msgid "Trackable"
msgstr "可追踪"
-#: common/models.py:937
+#: common/models.py:933
msgid "Parts are trackable by default"
msgstr "商品默认可跟踪"
-#: common/models.py:943 part/models.py:990
+#: common/models.py:939 part/models.py:978
#: part/templates/part/part_base.html:151
#: templates/js/translated/table_filters.js:42
msgid "Virtual"
msgstr "虚拟"
-#: common/models.py:944
+#: common/models.py:940
msgid "Parts are virtual by default"
msgstr "商品默认是虚拟的"
-#: common/models.py:950
+#: common/models.py:946
msgid "Show Import in Views"
msgstr "视图中显示导入"
-#: common/models.py:951
+#: common/models.py:947
msgid "Display the import wizard in some part views"
msgstr "在一些商品视图中显示导入向导"
-#: common/models.py:957
+#: common/models.py:953
msgid "Show Price in Forms"
msgstr "在表格中显示价格"
-#: common/models.py:958
+#: common/models.py:954
msgid "Display part price in some forms"
msgstr "以某些表格显示商品价格"
-#: common/models.py:969
+#: common/models.py:965
msgid "Show Price in BOM"
msgstr ""
-#: common/models.py:970
+#: common/models.py:966
msgid "Include pricing information in BOM tables"
msgstr ""
-#: common/models.py:981
+#: common/models.py:977
msgid "Show Price History"
msgstr ""
-#: common/models.py:982
+#: common/models.py:978
msgid "Display historical pricing for Part"
msgstr ""
-#: common/models.py:988
+#: common/models.py:984
msgid "Show related parts"
msgstr "显示相关商品"
-#: common/models.py:989
+#: common/models.py:985
msgid "Display related parts for a part"
msgstr ""
-#: common/models.py:995
+#: common/models.py:991
msgid "Create initial stock"
msgstr "创建初始库存"
-#: common/models.py:996
+#: common/models.py:992
msgid "Create initial stock on part creation"
msgstr ""
-#: common/models.py:1002
+#: common/models.py:998
msgid "Internal Prices"
msgstr "内部价格"
-#: common/models.py:1003
+#: common/models.py:999
msgid "Enable internal prices for parts"
msgstr "启用内部商品价格"
-#: common/models.py:1009
+#: common/models.py:1005
msgid "Internal Price as BOM-Price"
msgstr "内部价格为BOM价格"
-#: common/models.py:1010
+#: common/models.py:1006
msgid "Use the internal price (if set) in BOM-price calculations"
msgstr "在 BOM价格计算中使用内部价格(如设置)"
-#: common/models.py:1016
+#: common/models.py:1012
msgid "Part Name Display Format"
msgstr ""
-#: common/models.py:1017
+#: common/models.py:1013
msgid "Format to display the part name"
msgstr ""
-#: common/models.py:1024
+#: common/models.py:1020
msgid "Enable Reports"
msgstr ""
-#: common/models.py:1025
+#: common/models.py:1021
msgid "Enable generation of reports"
msgstr ""
-#: common/models.py:1031 templates/stats.html:25
+#: common/models.py:1027 templates/stats.html:25
msgid "Debug Mode"
msgstr "调试模式"
-#: common/models.py:1032
+#: common/models.py:1028
msgid "Generate reports in debug mode (HTML output)"
msgstr "在调试模式生成报告(HTML输出)"
-#: common/models.py:1038
+#: common/models.py:1034
msgid "Page Size"
msgstr "页面大小"
-#: common/models.py:1039
+#: common/models.py:1035
msgid "Default page size for PDF reports"
msgstr "PDF 报表默认页面大小"
-#: common/models.py:1049
+#: common/models.py:1045
msgid "Test Reports"
msgstr "测试报表"
-#: common/models.py:1050
+#: common/models.py:1046
msgid "Enable generation of test reports"
msgstr "启用生成测试报表"
-#: common/models.py:1056
+#: common/models.py:1052
msgid "Batch Code Template"
msgstr ""
-#: common/models.py:1057
+#: common/models.py:1053
msgid "Template for generating default batch codes for stock items"
msgstr ""
-#: common/models.py:1062
+#: common/models.py:1058
msgid "Stock Expiry"
msgstr "库存到期"
-#: common/models.py:1063
+#: common/models.py:1059
msgid "Enable stock expiry functionality"
msgstr "启用库存到期功能"
-#: common/models.py:1069
+#: common/models.py:1065
msgid "Sell Expired Stock"
msgstr "销售过期库存"
-#: common/models.py:1070
+#: common/models.py:1066
msgid "Allow sale of expired stock"
msgstr "允许销售过期库存"
-#: common/models.py:1076
+#: common/models.py:1072
msgid "Stock Stale Time"
msgstr ""
-#: common/models.py:1077
+#: common/models.py:1073
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/models.py:1079
+#: common/models.py:1075
msgid "days"
msgstr "天"
-#: common/models.py:1084
+#: common/models.py:1080
msgid "Build Expired Stock"
msgstr ""
-#: common/models.py:1085
+#: common/models.py:1081
msgid "Allow building with expired stock"
msgstr ""
-#: common/models.py:1091
+#: common/models.py:1087
msgid "Stock Ownership Control"
msgstr "库存所有权控制"
-#: common/models.py:1092
+#: common/models.py:1088
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/models.py:1098
+#: common/models.py:1094
msgid "Build Order Reference Prefix"
msgstr "生产订单参考前缀"
-#: common/models.py:1099
+#: common/models.py:1095
msgid "Prefix value for build order reference"
msgstr ""
-#: common/models.py:1104
+#: common/models.py:1100
msgid "Build Order Reference Regex"
msgstr ""
-#: common/models.py:1105
+#: common/models.py:1101
msgid "Regular expression pattern for matching build order reference"
msgstr ""
-#: common/models.py:1109
+#: common/models.py:1105
msgid "Sales Order Reference Prefix"
msgstr ""
-#: common/models.py:1110
+#: common/models.py:1106
msgid "Prefix value for sales order reference"
msgstr ""
-#: common/models.py:1115
+#: common/models.py:1111
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/models.py:1116
+#: common/models.py:1112
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/models.py:1122
+#: common/models.py:1118
msgid "Purchase Order Reference Prefix"
msgstr ""
-#: common/models.py:1123
+#: common/models.py:1119
msgid "Prefix value for purchase order reference"
msgstr ""
-#: common/models.py:1129
+#: common/models.py:1125
msgid "Enable password forgot"
msgstr ""
-#: common/models.py:1130
+#: common/models.py:1126
msgid "Enable password forgot function on the login pages"
msgstr ""
-#: common/models.py:1136
+#: common/models.py:1132
msgid "Enable registration"
msgstr ""
-#: common/models.py:1137
+#: common/models.py:1133
msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/models.py:1143
+#: common/models.py:1139
msgid "Enable SSO"
msgstr ""
-#: common/models.py:1144
+#: common/models.py:1140
msgid "Enable SSO on the login pages"
msgstr ""
-#: common/models.py:1150
+#: common/models.py:1146
msgid "Email required"
msgstr ""
-#: common/models.py:1151
+#: common/models.py:1147
msgid "Require user to supply mail on signup"
msgstr ""
-#: common/models.py:1157
+#: common/models.py:1153
msgid "Auto-fill SSO users"
msgstr ""
-#: common/models.py:1158
+#: common/models.py:1154
msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
-#: common/models.py:1164
+#: common/models.py:1160
msgid "Mail twice"
msgstr ""
-#: common/models.py:1165
+#: common/models.py:1161
msgid "On signup ask users twice for their mail"
msgstr ""
-#: common/models.py:1171
+#: common/models.py:1167
msgid "Password twice"
msgstr ""
-#: common/models.py:1172
+#: common/models.py:1168
msgid "On signup ask users twice for their password"
msgstr ""
-#: common/models.py:1178
+#: common/models.py:1174
msgid "Group on signup"
msgstr ""
-#: common/models.py:1179
+#: common/models.py:1175
msgid "Group to which new users are assigned on registration"
msgstr ""
-#: common/models.py:1185
+#: common/models.py:1181
msgid "Enforce MFA"
msgstr ""
-#: common/models.py:1186
+#: common/models.py:1182
msgid "Users must use multifactor security."
msgstr ""
-#: common/models.py:1192
+#: common/models.py:1188
msgid "Check plugins on startup"
msgstr ""
-#: common/models.py:1193
+#: common/models.py:1189
msgid "Check that all plugins are installed on startup - enable in container enviroments"
msgstr ""
-#: common/models.py:1201
+#: common/models.py:1197
msgid "Enable URL integration"
msgstr ""
-#: common/models.py:1202
+#: common/models.py:1198
msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/models.py:1209
+#: common/models.py:1205
msgid "Enable navigation integration"
msgstr ""
-#: common/models.py:1210
+#: common/models.py:1206
msgid "Enable plugins to integrate into navigation"
msgstr ""
-#: common/models.py:1217
+#: common/models.py:1213
msgid "Enable app integration"
msgstr ""
-#: common/models.py:1218
+#: common/models.py:1214
msgid "Enable plugins to add apps"
msgstr ""
-#: common/models.py:1225
+#: common/models.py:1221
msgid "Enable schedule integration"
msgstr ""
-#: common/models.py:1226
+#: common/models.py:1222
msgid "Enable plugins to run scheduled tasks"
msgstr ""
-#: common/models.py:1233
+#: common/models.py:1229
msgid "Enable event integration"
msgstr ""
-#: common/models.py:1234
+#: common/models.py:1230
msgid "Enable plugins to respond to internal events"
msgstr ""
-#: common/models.py:1249 common/models.py:1564
+#: common/models.py:1245 common/models.py:1560
msgid "Settings key (must be unique - case insensitive"
msgstr ""
-#: common/models.py:1280
+#: common/models.py:1276
msgid "Show subscribed parts"
msgstr ""
-#: common/models.py:1281
+#: common/models.py:1277
msgid "Show subscribed parts on the homepage"
msgstr ""
-#: common/models.py:1287
+#: common/models.py:1283
msgid "Show subscribed categories"
msgstr ""
-#: common/models.py:1288
+#: common/models.py:1284
msgid "Show subscribed part categories on the homepage"
msgstr ""
-#: common/models.py:1294
+#: common/models.py:1290
msgid "Show latest parts"
msgstr "显示最近商品"
-#: common/models.py:1295
+#: common/models.py:1291
msgid "Show latest parts on the homepage"
msgstr "在主页上显示最近商品"
-#: common/models.py:1301
+#: common/models.py:1297
msgid "Recent Part Count"
msgstr ""
-#: common/models.py:1302
+#: common/models.py:1298
msgid "Number of recent parts to display on index page"
msgstr ""
-#: common/models.py:1308
+#: common/models.py:1304
msgid "Show unvalidated BOMs"
msgstr ""
-#: common/models.py:1309
+#: common/models.py:1305
msgid "Show BOMs that await validation on the homepage"
msgstr ""
-#: common/models.py:1315
+#: common/models.py:1311
msgid "Show recent stock changes"
msgstr ""
-#: common/models.py:1316
+#: common/models.py:1312
msgid "Show recently changed stock items on the homepage"
msgstr ""
-#: common/models.py:1322
+#: common/models.py:1318
msgid "Recent Stock Count"
msgstr ""
-#: common/models.py:1323
+#: common/models.py:1319
msgid "Number of recent stock items to display on index page"
msgstr ""
-#: common/models.py:1329
+#: common/models.py:1325
msgid "Show low stock"
msgstr ""
-#: common/models.py:1330
+#: common/models.py:1326
msgid "Show low stock items on the homepage"
msgstr ""
-#: common/models.py:1336
+#: common/models.py:1332
msgid "Show depleted stock"
msgstr ""
-#: common/models.py:1337
+#: common/models.py:1333
msgid "Show depleted stock items on the homepage"
msgstr ""
-#: common/models.py:1343
+#: common/models.py:1339
msgid "Show needed stock"
msgstr ""
-#: common/models.py:1344
+#: common/models.py:1340
msgid "Show stock items needed for builds on the homepage"
msgstr ""
-#: common/models.py:1350
+#: common/models.py:1346
msgid "Show expired stock"
msgstr ""
-#: common/models.py:1351
+#: common/models.py:1347
msgid "Show expired stock items on the homepage"
msgstr ""
-#: common/models.py:1357
+#: common/models.py:1353
msgid "Show stale stock"
msgstr ""
-#: common/models.py:1358
+#: common/models.py:1354
msgid "Show stale stock items on the homepage"
msgstr ""
-#: common/models.py:1364
+#: common/models.py:1360
msgid "Show pending builds"
msgstr ""
-#: common/models.py:1365
+#: common/models.py:1361
msgid "Show pending builds on the homepage"
msgstr ""
-#: common/models.py:1371
+#: common/models.py:1367
msgid "Show overdue builds"
msgstr "显示逾期生产"
-#: common/models.py:1372
+#: common/models.py:1368
msgid "Show overdue builds on the homepage"
msgstr "在主页上显示逾期的生产"
-#: common/models.py:1378
+#: common/models.py:1374
msgid "Show outstanding POs"
msgstr ""
-#: common/models.py:1379
+#: common/models.py:1375
msgid "Show outstanding POs on the homepage"
msgstr ""
-#: common/models.py:1385
+#: common/models.py:1381
msgid "Show overdue POs"
msgstr ""
-#: common/models.py:1386
+#: common/models.py:1382
msgid "Show overdue POs on the homepage"
msgstr ""
-#: common/models.py:1392
+#: common/models.py:1388
msgid "Show outstanding SOs"
msgstr ""
-#: common/models.py:1393
+#: common/models.py:1389
msgid "Show outstanding SOs on the homepage"
msgstr ""
-#: common/models.py:1399
+#: common/models.py:1395
msgid "Show overdue SOs"
msgstr ""
-#: common/models.py:1400
+#: common/models.py:1396
msgid "Show overdue SOs on the homepage"
msgstr ""
-#: common/models.py:1405
+#: common/models.py:1401
msgid "Enable label printing"
msgstr ""
-#: common/models.py:1406
+#: common/models.py:1402
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/models.py:1412
+#: common/models.py:1408
msgid "Inline label display"
msgstr "内嵌标签显示"
-#: common/models.py:1413
+#: common/models.py:1409
msgid "Display PDF labels in the browser, instead of downloading as a file"
msgstr "在浏览器中显示 PDF 标签,而不是以文件形式下载"
-#: common/models.py:1419
+#: common/models.py:1415
msgid "Inline report display"
msgstr ""
-#: common/models.py:1420
+#: common/models.py:1416
msgid "Display PDF reports in the browser, instead of downloading as a file"
msgstr "在浏览器中显示 PDF 报告,而不是以文件形式下载"
-#: common/models.py:1426
+#: common/models.py:1422
msgid "Search Parts"
msgstr ""
-#: common/models.py:1427
+#: common/models.py:1423
msgid "Display parts in search preview window"
msgstr ""
-#: common/models.py:1433
+#: common/models.py:1429
msgid "Hide Inactive Parts"
msgstr ""
-#: common/models.py:1434
+#: common/models.py:1430
msgid "Excluded inactive parts from search preview window"
msgstr ""
-#: common/models.py:1440
+#: common/models.py:1436
msgid "Search Categories"
msgstr ""
-#: common/models.py:1441
+#: common/models.py:1437
msgid "Display part categories in search preview window"
msgstr ""
-#: common/models.py:1447
+#: common/models.py:1443
msgid "Search Stock"
msgstr ""
-#: common/models.py:1448
+#: common/models.py:1444
msgid "Display stock items in search preview window"
msgstr ""
-#: common/models.py:1454
+#: common/models.py:1450
msgid "Hide Unavailable Stock Items"
msgstr ""
-#: common/models.py:1455
+#: common/models.py:1451
msgid "Exclude stock items which are not available from the search preview window"
msgstr ""
-#: common/models.py:1461
+#: common/models.py:1457
msgid "Search Locations"
msgstr ""
-#: common/models.py:1462
+#: common/models.py:1458
msgid "Display stock locations in search preview window"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1464
msgid "Search Companies"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1465
msgid "Display companies in search preview window"
msgstr ""
-#: common/models.py:1475
+#: common/models.py:1471
msgid "Search Purchase Orders"
msgstr ""
-#: common/models.py:1476
+#: common/models.py:1472
msgid "Display purchase orders in search preview window"
msgstr ""
-#: common/models.py:1482
+#: common/models.py:1478
msgid "Exclude Inactive Purchase Orders"
msgstr ""
-#: common/models.py:1483
+#: common/models.py:1479
msgid "Exclude inactive purchase orders from search preview window"
msgstr ""
-#: common/models.py:1489
+#: common/models.py:1485
msgid "Search Sales Orders"
msgstr ""
-#: common/models.py:1490
+#: common/models.py:1486
msgid "Display sales orders in search preview window"
msgstr ""
-#: common/models.py:1496
+#: common/models.py:1492
msgid "Exclude Inactive Sales Orders"
msgstr ""
-#: common/models.py:1497
+#: common/models.py:1493
msgid "Exclude inactive sales orders from search preview window"
msgstr ""
-#: common/models.py:1503
+#: common/models.py:1499
msgid "Search Preview Results"
msgstr "搜索预览结果"
-#: common/models.py:1504
+#: common/models.py:1500
msgid "Number of results to show in each section of the search preview window"
msgstr ""
-#: common/models.py:1510
+#: common/models.py:1506
msgid "Show Quantity in Forms"
msgstr "在表格中显示数量"
-#: common/models.py:1511
+#: common/models.py:1507
msgid "Display available part quantity in some forms"
msgstr "在某些表格中显示可用的商品数量"
-#: common/models.py:1517
+#: common/models.py:1513
msgid "Escape Key Closes Forms"
msgstr ""
-#: common/models.py:1518
+#: common/models.py:1514
msgid "Use the escape key to close modal forms"
msgstr ""
-#: common/models.py:1524
+#: common/models.py:1520
msgid "Fixed Navbar"
msgstr ""
-#: common/models.py:1525
+#: common/models.py:1521
msgid "The navbar position is fixed to the top of the screen"
msgstr ""
-#: common/models.py:1531
+#: common/models.py:1527
msgid "Date Format"
msgstr ""
-#: common/models.py:1532
+#: common/models.py:1528
msgid "Preferred format for displaying dates"
msgstr ""
-#: common/models.py:1546 part/templates/part/detail.html:39
+#: common/models.py:1542 part/templates/part/detail.html:39
msgid "Part Scheduling"
msgstr ""
-#: common/models.py:1547
+#: common/models.py:1543
msgid "Display part scheduling information"
msgstr ""
-#: common/models.py:1615 company/forms.py:40
+#: common/models.py:1611 company/forms.py:39
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1622 company/serializers.py:288
-#: company/templates/company/supplier_part.html:263 order/models.py:921
+#: common/models.py:1618 company/serializers.py:285
+#: company/templates/company/supplier_part.html:263 order/models.py:917
#: templates/js/translated/part.js:998 templates/js/translated/part.js:1974
msgid "Price"
msgstr "价格"
-#: common/models.py:1623
+#: common/models.py:1619
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1783 common/models.py:1920
+#: common/models.py:1779 common/models.py:1916
msgid "Endpoint"
msgstr ""
-#: common/models.py:1784
+#: common/models.py:1780
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1793
+#: common/models.py:1789
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1798 part/models.py:985 plugin/models.py:106
+#: common/models.py:1794 part/models.py:973 plugin/models.py:105
#: templates/js/translated/table_filters.js:34
#: templates/js/translated/table_filters.js:96
#: templates/js/translated/table_filters.js:308
@@ -2442,79 +2442,79 @@ msgstr ""
msgid "Active"
msgstr ""
-#: common/models.py:1799
+#: common/models.py:1795
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1813
+#: common/models.py:1809
msgid "Token"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1810
msgid "Token for access"
msgstr ""
-#: common/models.py:1821
+#: common/models.py:1817
msgid "Secret"
msgstr ""
-#: common/models.py:1822
+#: common/models.py:1818
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1887
+#: common/models.py:1883
msgid "Message ID"
msgstr ""
-#: common/models.py:1888
+#: common/models.py:1884
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1896
+#: common/models.py:1892
msgid "Host"
msgstr ""
-#: common/models.py:1897
+#: common/models.py:1893
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1904
+#: common/models.py:1900
msgid "Header"
msgstr ""
-#: common/models.py:1905
+#: common/models.py:1901
msgid "Header of this message"
msgstr ""
-#: common/models.py:1911
+#: common/models.py:1907
msgid "Body"
msgstr ""
-#: common/models.py:1912
+#: common/models.py:1908
msgid "Body of this message"
msgstr ""
-#: common/models.py:1921
+#: common/models.py:1917
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1926
+#: common/models.py:1922
msgid "Worked on"
msgstr ""
-#: common/models.py:1927
+#: common/models.py:1923
msgid "Was the work on this message finished?"
msgstr ""
#: common/views.py:90 order/templates/order/purchase_order_detail.html:23
-#: order/views.py:119 part/views.py:205
+#: order/views.py:115 part/views.py:194
#: templates/patterns/wizard/upload.html:37
msgid "Upload File"
msgstr "上传文件"
-#: common/views.py:91 order/views.py:120
+#: common/views.py:91 order/views.py:116
#: part/templates/part/import_wizard/ajax_match_fields.html:45
-#: part/views.py:206 templates/patterns/wizard/match_fields.html:51
+#: part/views.py:195 templates/patterns/wizard/match_fields.html:51
msgid "Match Fields"
msgstr "匹配字段"
@@ -2537,118 +2537,118 @@ msgstr "已导入商品"
msgid "Previous Step"
msgstr ""
-#: company/forms.py:21 part/forms.py:43
+#: company/forms.py:20 part/forms.py:41
#: templates/InvenTree/settings/mixins/urls.html:14
msgid "URL"
msgstr ""
-#: company/forms.py:22 part/forms.py:44
+#: company/forms.py:21 part/forms.py:42
msgid "Image URL"
msgstr "图片URL"
-#: company/models.py:103
+#: company/models.py:97
msgid "Company description"
msgstr "公司简介"
-#: company/models.py:104
+#: company/models.py:98
msgid "Description of the company"
msgstr "公司简介"
-#: company/models.py:110 company/templates/company/company_base.html:100
+#: company/models.py:104 company/templates/company/company_base.html:100
#: templates/InvenTree/settings/plugin_settings.html:55
#: templates/js/translated/company.js:349
msgid "Website"
msgstr "网站"
-#: company/models.py:111
+#: company/models.py:105
msgid "Company website URL"
msgstr "公司网站"
-#: company/models.py:115 company/templates/company/company_base.html:118
+#: company/models.py:109 company/templates/company/company_base.html:118
msgid "Address"
msgstr "地址"
-#: company/models.py:116
+#: company/models.py:110
msgid "Company address"
msgstr "公司地址"
-#: company/models.py:119
+#: company/models.py:113
msgid "Phone number"
msgstr "电话号码"
-#: company/models.py:120
+#: company/models.py:114
msgid "Contact phone number"
msgstr "联系电话"
-#: company/models.py:123 company/templates/company/company_base.html:132
+#: company/models.py:117 company/templates/company/company_base.html:132
#: templates/InvenTree/settings/user.html:48
msgid "Email"
msgstr "电子邮件"
-#: company/models.py:123
+#: company/models.py:117
msgid "Contact email address"
msgstr "联系人电子邮件"
-#: company/models.py:126 company/templates/company/company_base.html:139
+#: company/models.py:120 company/templates/company/company_base.html:139
msgid "Contact"
msgstr "联系人"
-#: company/models.py:127
+#: company/models.py:121
msgid "Point of contact"
msgstr ""
-#: company/models.py:129
+#: company/models.py:123
msgid "Link to external company information"
msgstr "链接到外部公司信息"
-#: company/models.py:137 part/models.py:877
+#: company/models.py:131 part/models.py:865
msgid "Image"
msgstr "图片"
-#: company/models.py:142
+#: company/models.py:136
msgid "is customer"
msgstr "是客户"
-#: company/models.py:142
+#: company/models.py:136
msgid "Do you sell items to this company?"
msgstr "您是否向该公司出售商品?"
-#: company/models.py:144
+#: company/models.py:138
msgid "is supplier"
msgstr "是供应商"
-#: company/models.py:144
+#: company/models.py:138
msgid "Do you purchase items from this company?"
msgstr "您是否从该公司采购商品?"
-#: company/models.py:146
+#: company/models.py:140
msgid "is manufacturer"
msgstr "是制造商"
-#: company/models.py:146
+#: company/models.py:140
msgid "Does this company manufacture parts?"
msgstr "该公司制造商品吗?"
-#: company/models.py:150 company/serializers.py:294
-#: company/templates/company/company_base.html:106 part/serializers.py:156
-#: part/serializers.py:188 stock/serializers.py:176
+#: company/models.py:144 company/serializers.py:291
+#: company/templates/company/company_base.html:106 part/serializers.py:151
+#: part/serializers.py:183 stock/serializers.py:168
msgid "Currency"
msgstr "货币"
-#: company/models.py:153
+#: company/models.py:147
msgid "Default currency used for this company"
msgstr "该公司使用的默认货币"
-#: company/models.py:315 company/models.py:546 stock/models.py:616
+#: company/models.py:309 company/models.py:540 stock/models.py:607
#: stock/templates/stock/item_base.html:148 templates/js/translated/bom.js:542
msgid "Base Part"
msgstr ""
-#: company/models.py:319 company/models.py:550
+#: company/models.py:313 company/models.py:544
msgid "Select part"
msgstr "选择商品"
-#: company/models.py:330 company/templates/company/company_base.html:76
+#: company/models.py:324 company/templates/company/company_base.html:76
#: company/templates/company/manufacturer_part.html:90
#: company/templates/company/supplier_part.html:103
#: stock/templates/stock/item_base.html:370
@@ -2659,146 +2659,146 @@ msgstr "选择商品"
msgid "Manufacturer"
msgstr "制造商"
-#: company/models.py:331 templates/js/translated/part.js:236
+#: company/models.py:325 templates/js/translated/part.js:236
msgid "Select manufacturer"
msgstr "选择制造商"
-#: company/models.py:337 company/templates/company/manufacturer_part.html:101
+#: company/models.py:331 company/templates/company/manufacturer_part.html:101
#: company/templates/company/supplier_part.html:111
#: templates/js/translated/company.js:533
-#: templates/js/translated/company.js:818 templates/js/translated/order.js:1683
+#: templates/js/translated/company.js:818 templates/js/translated/order.js:1789
#: templates/js/translated/part.js:246 templates/js/translated/part.js:956
msgid "MPN"
msgstr ""
-#: company/models.py:338 templates/js/translated/part.js:247
+#: company/models.py:332 templates/js/translated/part.js:247
msgid "Manufacturer Part Number"
msgstr "制造商商品编号"
-#: company/models.py:344
+#: company/models.py:338
msgid "URL for external manufacturer part link"
msgstr ""
-#: company/models.py:350
+#: company/models.py:344
msgid "Manufacturer part description"
msgstr "制造商商品描述"
-#: company/models.py:397 company/models.py:420 company/models.py:569
+#: company/models.py:391 company/models.py:414 company/models.py:563
#: company/templates/company/manufacturer_part.html:7
#: company/templates/company/manufacturer_part.html:24
#: stock/templates/stock/item_base.html:380
msgid "Manufacturer Part"
msgstr "制造商商品"
-#: company/models.py:427
+#: company/models.py:421
msgid "Parameter name"
msgstr "参数名称"
-#: company/models.py:433
+#: company/models.py:427
#: report/templates/report/inventree_test_report_base.html:95
-#: stock/models.py:2204 templates/js/translated/company.js:647
+#: stock/models.py:2195 templates/js/translated/company.js:647
#: templates/js/translated/part.js:776 templates/js/translated/stock.js:1304
msgid "Value"
msgstr "数值"
-#: company/models.py:434
+#: company/models.py:428
msgid "Parameter value"
msgstr "参数值"
-#: company/models.py:440 part/models.py:952 part/models.py:2561
+#: company/models.py:434 part/models.py:940 part/models.py:2549
#: part/templates/part/part_base.html:280
#: templates/InvenTree/settings/settings.html:332
#: templates/js/translated/company.js:653 templates/js/translated/part.js:782
msgid "Units"
msgstr "单位"
-#: company/models.py:441
+#: company/models.py:435
msgid "Parameter units"
msgstr "参数单位"
-#: company/models.py:513
+#: company/models.py:507
msgid "Linked manufacturer part must reference the same base part"
msgstr ""
-#: company/models.py:556 company/templates/company/company_base.html:81
-#: company/templates/company/supplier_part.html:87 order/models.py:256
+#: company/models.py:550 company/templates/company/company_base.html:81
+#: company/templates/company/supplier_part.html:87 order/models.py:252
#: order/templates/order/order_base.html:112 part/bom.py:237 part/bom.py:265
#: stock/templates/stock/item_base.html:387
#: templates/js/translated/company.js:337
-#: templates/js/translated/company.js:774 templates/js/translated/order.js:1443
+#: templates/js/translated/company.js:774 templates/js/translated/order.js:1549
#: templates/js/translated/part.js:216 templates/js/translated/part.js:924
#: templates/js/translated/table_filters.js:415
msgid "Supplier"
msgstr "供应商"
-#: company/models.py:557 templates/js/translated/part.js:217
+#: company/models.py:551 templates/js/translated/part.js:217
msgid "Select supplier"
msgstr "选择供应商"
-#: company/models.py:562 company/templates/company/supplier_part.html:97
-#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1670
+#: company/models.py:556 company/templates/company/supplier_part.html:97
+#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1776
#: templates/js/translated/part.js:227 templates/js/translated/part.js:942
msgid "SKU"
msgstr ""
-#: company/models.py:563 templates/js/translated/part.js:228
+#: company/models.py:557 templates/js/translated/part.js:228
msgid "Supplier stock keeping unit"
msgstr ""
-#: company/models.py:570
+#: company/models.py:564
msgid "Select manufacturer part"
msgstr "选择制造商商品"
-#: company/models.py:576
+#: company/models.py:570
msgid "URL for external supplier part link"
msgstr "外部供货商商品链接URL"
-#: company/models.py:582
+#: company/models.py:576
msgid "Supplier part description"
msgstr "供应商商品描述"
-#: company/models.py:587 company/templates/company/supplier_part.html:125
-#: part/models.py:2800 part/templates/part/upload_bom.html:59
+#: company/models.py:581 company/templates/company/supplier_part.html:125
+#: part/models.py:2788 part/templates/part/upload_bom.html:59
#: report/templates/report/inventree_po_report.html:92
-#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:406
+#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:398
msgid "Note"
msgstr "备注"
-#: company/models.py:591 part/models.py:1870
+#: company/models.py:585 part/models.py:1858
msgid "base cost"
msgstr ""
-#: company/models.py:591 part/models.py:1870
+#: company/models.py:585 part/models.py:1858
msgid "Minimum charge (e.g. stocking fee)"
msgstr "最低收费(例如库存费)"
-#: company/models.py:593 company/templates/company/supplier_part.html:118
-#: stock/models.py:640 stock/templates/stock/item_base.html:328
+#: company/models.py:587 company/templates/company/supplier_part.html:118
+#: stock/models.py:631 stock/templates/stock/item_base.html:328
#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1918
msgid "Packaging"
msgstr "打包"
-#: company/models.py:593
+#: company/models.py:587
msgid "Part packaging"
msgstr "商品打包"
-#: company/models.py:595 part/models.py:1872
+#: company/models.py:589 part/models.py:1860
msgid "multiple"
msgstr ""
-#: company/models.py:595
+#: company/models.py:589
msgid "Order multiple"
msgstr ""
-#: company/models.py:719
+#: company/models.py:713
msgid "last updated"
msgstr ""
-#: company/serializers.py:71
+#: company/serializers.py:68
msgid "Default currency used for this supplier"
msgstr "该公司使用的默认货币"
-#: company/serializers.py:72
+#: company/serializers.py:69
msgid "Currency Code"
msgstr "货币代码"
@@ -2809,7 +2809,7 @@ msgid "Company"
msgstr "公司"
#: company/templates/company/company_base.html:22
-#: templates/js/translated/order.js:416
+#: templates/js/translated/order.js:522
msgid "Create Purchase Order"
msgstr "创建采购订单"
@@ -2845,11 +2845,11 @@ msgstr "上传新图片"
msgid "Download image from URL"
msgstr "从 URL 下载图片"
-#: company/templates/company/company_base.html:86 order/models.py:604
-#: order/templates/order/sales_order_base.html:115 stock/models.py:659
-#: stock/models.py:660 stock/serializers.py:722
+#: company/templates/company/company_base.html:86 order/models.py:600
+#: order/templates/order/sales_order_base.html:116 stock/models.py:650
+#: stock/models.py:651 stock/serializers.py:714
#: stock/templates/stock/item_base.html:280
-#: templates/js/translated/company.js:329 templates/js/translated/order.js:2130
+#: templates/js/translated/company.js:329 templates/js/translated/order.js:2236
#: templates/js/translated/stock.js:2436
#: templates/js/translated/table_filters.js:419
msgid "Customer"
@@ -2935,7 +2935,7 @@ msgstr "供货商库存"
#: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197
#: templates/InvenTree/settings/sidebar.html:47
#: templates/js/translated/search.js:190 templates/navbar.html:50
-#: users/models.py:45
+#: users/models.py:43
msgid "Purchase Orders"
msgstr "采购订单"
@@ -2958,7 +2958,7 @@ msgstr "新建采购订单"
#: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217
#: templates/InvenTree/settings/sidebar.html:49
#: templates/js/translated/search.js:214 templates/navbar.html:61
-#: users/models.py:46
+#: users/models.py:44
msgid "Sales Orders"
msgstr "销售订单"
@@ -2997,7 +2997,7 @@ msgstr "删除所有选定的供应商商品"
msgid "Supplier List"
msgstr "供应商列表"
-#: company/templates/company/manufacturer_part.html:15 company/views.py:52
+#: company/templates/company/manufacturer_part.html:15 company/views.py:47
#: part/templates/part/prices.html:170 templates/InvenTree/search.html:178
#: templates/navbar.html:49
msgid "Manufacturers"
@@ -3030,7 +3030,7 @@ msgid "No manufacturer information available"
msgstr ""
#: company/templates/company/manufacturer_part.html:119
-#: company/templates/company/supplier_part.html:15 company/views.py:46
+#: company/templates/company/supplier_part.html:15 company/views.py:41
#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:166
#: templates/InvenTree/search.html:188 templates/navbar.html:48
msgid "Suppliers"
@@ -3046,7 +3046,7 @@ msgstr "删除供应商商品"
#: company/templates/company/manufacturer_part.html:303
#: part/templates/part/detail.html:363 part/templates/part/detail.html:392
#: templates/js/translated/bom.js:699 templates/js/translated/company.js:426
-#: templates/js/translated/helpers.js:32 users/models.py:222
+#: templates/js/translated/helpers.js:32 users/models.py:220
msgid "Delete"
msgstr "删除"
@@ -3098,9 +3098,9 @@ msgid "Assigned Stock Items"
msgstr ""
#: company/templates/company/supplier_part.html:7
-#: company/templates/company/supplier_part.html:24 stock/models.py:624
+#: company/templates/company/supplier_part.html:24 stock/models.py:615
#: stock/templates/stock/item_base.html:396
-#: templates/js/translated/company.js:790 templates/js/translated/order.js:763
+#: templates/js/translated/company.js:790 templates/js/translated/order.js:869
#: templates/js/translated/stock.js:1875
msgid "Supplier Part"
msgstr "供应商商品"
@@ -3217,536 +3217,532 @@ msgstr "定价"
#: stock/templates/stock/location.html:173
#: stock/templates/stock/location_sidebar.html:7
#: templates/InvenTree/search.html:152 templates/js/translated/search.js:138
-#: templates/js/translated/stock.js:2312 users/models.py:43
+#: templates/js/translated/stock.js:2312 users/models.py:41
msgid "Stock Items"
msgstr "库存项"
-#: company/views.py:47
+#: company/views.py:42
msgid "New Supplier"
msgstr "新增供应商"
-#: company/views.py:53
+#: company/views.py:48
msgid "New Manufacturer"
msgstr "新建制造商"
-#: company/views.py:58 templates/InvenTree/search.html:208
+#: company/views.py:53 templates/InvenTree/search.html:208
#: templates/navbar.html:60
msgid "Customers"
msgstr "客户信息"
-#: company/views.py:59
+#: company/views.py:54
msgid "New Customer"
msgstr "新建客户"
-#: company/views.py:66 templates/js/translated/search.js:167
+#: company/views.py:61 templates/js/translated/search.js:167
msgid "Companies"
msgstr "公司"
-#: company/views.py:67
+#: company/views.py:62
msgid "New Company"
msgstr "新建公司信息"
-#: company/views.py:126 part/views.py:590
+#: company/views.py:121 part/views.py:579
msgid "Download Image"
msgstr "下载图片"
-#: company/views.py:155 part/views.py:622
+#: company/views.py:150 part/views.py:611
msgid "Image size exceeds maximum allowable size for download"
msgstr "图像大小超过下载允许的最大尺寸"
-#: company/views.py:162 part/views.py:629
+#: company/views.py:157 part/views.py:618
#, python-brace-format
msgid "Invalid response: {code}"
msgstr "无效响应: {code}"
-#: company/views.py:171 part/views.py:638
+#: company/views.py:166 part/views.py:627
msgid "Supplied URL is not a valid image file"
msgstr "提供的 URL 不是一个有效的图片文件"
-#: label/api.py:94 report/api.py:201
-msgid "No valid objects provided to template"
-msgstr "没有为模板提供有效对象"
-
-#: label/models.py:110
+#: label/models.py:105
msgid "Label name"
msgstr "标签名称"
-#: label/models.py:117
+#: label/models.py:112
msgid "Label description"
msgstr "标签说明"
-#: label/models.py:124
+#: label/models.py:119
msgid "Label"
msgstr "标签"
-#: label/models.py:125
+#: label/models.py:120
msgid "Label template file"
msgstr "标签模板文件"
-#: label/models.py:131 report/models.py:291
+#: label/models.py:126 report/models.py:286
msgid "Enabled"
msgstr "已启用"
-#: label/models.py:132
+#: label/models.py:127
msgid "Label template is enabled"
msgstr "标签模板已启用"
-#: label/models.py:137
+#: label/models.py:132
msgid "Width [mm]"
msgstr "宽度 [mm]"
-#: label/models.py:138
+#: label/models.py:133
msgid "Label width, specified in mm"
msgstr "标注宽度,以毫米为单位。"
-#: label/models.py:144
+#: label/models.py:139
msgid "Height [mm]"
msgstr "高度 [mm]"
-#: label/models.py:145
+#: label/models.py:140
msgid "Label height, specified in mm"
msgstr "标注高度,以毫米为单位。"
-#: label/models.py:151 report/models.py:284
+#: label/models.py:146 report/models.py:279
msgid "Filename Pattern"
msgstr "文件名样式"
-#: label/models.py:152
+#: label/models.py:147
msgid "Pattern for generating label filenames"
msgstr ""
-#: label/models.py:255
+#: label/models.py:250
msgid "Query filters (comma-separated list of key=value pairs),"
msgstr "查询筛选器 (逗号分隔的键值对列表)"
-#: label/models.py:256 label/models.py:316 label/models.py:363
-#: report/models.py:315 report/models.py:452 report/models.py:491
+#: label/models.py:251 label/models.py:295 label/models.py:327
+#: report/models.py:310 report/models.py:447 report/models.py:486
msgid "Filters"
msgstr "筛选器"
-#: label/models.py:315
+#: label/models.py:294
msgid "Query filters (comma-separated list of key=value pairs"
msgstr "查询筛选器 (逗号分隔的键值对列表"
-#: label/models.py:362
+#: label/models.py:326
msgid "Part query filters (comma-separated value of key=value pairs)"
msgstr "商品查询筛选器 (逗号分隔的键值对列表)"
-#: order/models.py:134
+#: order/models.py:130
msgid "Order description"
msgstr ""
-#: order/models.py:136
+#: order/models.py:132
msgid "Link to external page"
msgstr ""
-#: order/models.py:144
+#: order/models.py:140
msgid "Created By"
msgstr ""
-#: order/models.py:151
+#: order/models.py:147
msgid "User or group responsible for this order"
msgstr "负责此订单的用户或群组"
-#: order/models.py:156
+#: order/models.py:152
msgid "Order notes"
msgstr ""
-#: order/models.py:242 order/models.py:594
+#: order/models.py:238 order/models.py:590
msgid "Order reference"
msgstr ""
-#: order/models.py:247 order/models.py:609
+#: order/models.py:243 order/models.py:605
msgid "Purchase order status"
msgstr ""
-#: order/models.py:257
+#: order/models.py:253
msgid "Company from which the items are being ordered"
msgstr "订购该商品的公司"
-#: order/models.py:260 order/templates/order/order_base.html:124
-#: templates/js/translated/order.js:1452
+#: order/models.py:256 order/templates/order/order_base.html:124
+#: templates/js/translated/order.js:1558
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:260
+#: order/models.py:256
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:267
+#: order/models.py:263
msgid "received by"
msgstr ""
-#: order/models.py:272
+#: order/models.py:268
msgid "Issue Date"
msgstr ""
-#: order/models.py:273
+#: order/models.py:269
msgid "Date order was issued"
msgstr ""
-#: order/models.py:278
+#: order/models.py:274
msgid "Target Delivery Date"
msgstr ""
-#: order/models.py:279
+#: order/models.py:275
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:285
+#: order/models.py:281
msgid "Date order was completed"
msgstr ""
-#: order/models.py:314
+#: order/models.py:310
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:460
+#: order/models.py:456
msgid "Quantity must be a positive number"
msgstr "数量必须大于0"
-#: order/models.py:605
+#: order/models.py:601
msgid "Company to which the items are being sold"
msgstr "向其出售该商品的公司"
-#: order/models.py:611
+#: order/models.py:607
msgid "Customer Reference "
msgstr ""
-#: order/models.py:611
+#: order/models.py:607
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:616
+#: order/models.py:612
msgid "Target date for order completion. Order will be overdue after this date."
msgstr ""
-#: order/models.py:619 order/models.py:1174
-#: templates/js/translated/order.js:2177 templates/js/translated/order.js:2328
+#: order/models.py:615 order/models.py:1170
+#: templates/js/translated/order.js:2283 templates/js/translated/order.js:2434
msgid "Shipment Date"
msgstr ""
-#: order/models.py:626
+#: order/models.py:622
msgid "shipped by"
msgstr ""
-#: order/models.py:692
+#: order/models.py:688
msgid "Order cannot be completed as no parts have been assigned"
msgstr ""
-#: order/models.py:696
+#: order/models.py:692
msgid "Only a pending order can be marked as complete"
msgstr ""
-#: order/models.py:699
+#: order/models.py:695
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:702
+#: order/models.py:698
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:882
+#: order/models.py:878
msgid "Item quantity"
msgstr ""
-#: order/models.py:888
+#: order/models.py:884
msgid "Line item reference"
msgstr ""
-#: order/models.py:890
+#: order/models.py:886
msgid "Line item notes"
msgstr ""
-#: order/models.py:895
+#: order/models.py:891
msgid "Target shipping date for this line item"
msgstr ""
-#: order/models.py:913
+#: order/models.py:909
msgid "Context"
msgstr ""
-#: order/models.py:914
+#: order/models.py:910
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:922
+#: order/models.py:918
msgid "Unit price"
msgstr ""
-#: order/models.py:955
+#: order/models.py:951
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:962
+#: order/models.py:958
msgid "deleted"
msgstr ""
-#: order/models.py:968 order/models.py:1050 order/models.py:1072
-#: order/models.py:1168 order/models.py:1268
-#: templates/js/translated/order.js:2719
+#: order/models.py:964 order/models.py:1046 order/models.py:1068
+#: order/models.py:1164 order/models.py:1273
+#: templates/js/translated/order.js:2874
msgid "Order"
msgstr ""
-#: order/models.py:969 order/models.py:1050
+#: order/models.py:965 order/models.py:1046
#: order/templates/order/order_base.html:9
#: order/templates/order/order_base.html:18
#: report/templates/report/inventree_po_report.html:76
#: stock/templates/stock/item_base.html:342
-#: templates/js/translated/order.js:764 templates/js/translated/order.js:1421
+#: templates/js/translated/order.js:870 templates/js/translated/order.js:1527
#: templates/js/translated/part.js:899 templates/js/translated/stock.js:1852
#: templates/js/translated/stock.js:2417
msgid "Purchase Order"
msgstr ""
-#: order/models.py:988
+#: order/models.py:984
msgid "Supplier part"
msgstr "供应商商品"
-#: order/models.py:995 order/templates/order/order_base.html:169
-#: templates/js/translated/order.js:1197 templates/js/translated/order.js:1785
+#: order/models.py:991 order/templates/order/order_base.html:169
+#: templates/js/translated/order.js:1303 templates/js/translated/order.js:1891
#: templates/js/translated/part.js:993 templates/js/translated/part.js:1020
#: templates/js/translated/table_filters.js:330
msgid "Received"
msgstr ""
-#: order/models.py:996
+#: order/models.py:992
msgid "Number of items received"
msgstr ""
-#: order/models.py:1003 part/templates/part/prices.html:179 stock/models.py:754
-#: stock/serializers.py:167 stock/templates/stock/item_base.html:349
+#: order/models.py:999 part/templates/part/prices.html:179 stock/models.py:745
+#: stock/serializers.py:159 stock/templates/stock/item_base.html:349
#: templates/js/translated/stock.js:1906
msgid "Purchase Price"
msgstr "采购价格"
-#: order/models.py:1004
+#: order/models.py:1000
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:1012
+#: order/models.py:1008
msgid "Where does the Purchaser want this item to be stored?"
msgstr ""
-#: order/models.py:1082 part/templates/part/part_pricing.html:112
+#: order/models.py:1078 part/templates/part/part_pricing.html:112
#: part/templates/part/prices.html:119 part/templates/part/prices.html:288
msgid "Sale Price"
msgstr "销售价格"
-#: order/models.py:1083
+#: order/models.py:1079
msgid "Unit sale price"
msgstr ""
-#: order/models.py:1088
+#: order/models.py:1084
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:1175
+#: order/models.py:1171
msgid "Date of shipment"
msgstr ""
-#: order/models.py:1182
+#: order/models.py:1178
msgid "Checked By"
msgstr ""
-#: order/models.py:1183
+#: order/models.py:1179
msgid "User who checked this shipment"
msgstr ""
-#: order/models.py:1191
+#: order/models.py:1187
msgid "Shipment number"
msgstr ""
-#: order/models.py:1198
+#: order/models.py:1194
msgid "Shipment notes"
msgstr ""
-#: order/models.py:1205
+#: order/models.py:1201
msgid "Tracking Number"
msgstr ""
-#: order/models.py:1206
+#: order/models.py:1202
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:1216
+#: order/models.py:1213
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:1219
+#: order/models.py:1216
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:1306 order/models.py:1308
+#: order/models.py:1311 order/models.py:1313
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:1312
+#: order/models.py:1317
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:1314
+#: order/models.py:1319
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:1317
+#: order/models.py:1322
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:1321
+#: order/models.py:1326
msgid "StockItem is over-allocated"
msgstr ""
-#: order/models.py:1327 order/serializers.py:1002
+#: order/models.py:1332 order/serializers.py:1005
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:1330
+#: order/models.py:1335
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:1331
+#: order/models.py:1336
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:1339
+#: order/models.py:1344
msgid "Line"
msgstr ""
-#: order/models.py:1347 order/serializers.py:1112 order/serializers.py:1240
+#: order/models.py:1352 order/serializers.py:1115 order/serializers.py:1243
#: templates/js/translated/model_renderers.js:301
msgid "Shipment"
msgstr ""
-#: order/models.py:1348
+#: order/models.py:1353
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:1360 templates/InvenTree/notifications/notifications.html:70
+#: order/models.py:1365 templates/InvenTree/notifications/notifications.html:70
msgid "Item"
msgstr ""
-#: order/models.py:1361
+#: order/models.py:1366
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:1364
+#: order/models.py:1369
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/serializers.py:74
+#: order/serializers.py:69
msgid "Price currency"
msgstr ""
-#: order/serializers.py:203
+#: order/serializers.py:198
msgid "Order cannot be cancelled"
msgstr "无法取消订单"
-#: order/serializers.py:301
+#: order/serializers.py:296
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:325
+#: order/serializers.py:320
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:339
+#: order/serializers.py:334
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:344
+#: order/serializers.py:339
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:350
+#: order/serializers.py:345
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:351
+#: order/serializers.py:346
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:411 order/serializers.py:1077
+#: order/serializers.py:406 order/serializers.py:1080
msgid "Line Item"
msgstr ""
-#: order/serializers.py:417
+#: order/serializers.py:412
msgid "Line item does not match purchase order"
msgstr ""
-#: order/serializers.py:427 order/serializers.py:532
+#: order/serializers.py:422 order/serializers.py:527
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:446 templates/js/translated/order.js:1055
+#: order/serializers.py:441 templates/js/translated/order.js:1161
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:454 templates/js/translated/order.js:1066
+#: order/serializers.py:449 templates/js/translated/order.js:1172
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:467
+#: order/serializers.py:462
msgid "Barcode Hash"
msgstr ""
-#: order/serializers.py:468
+#: order/serializers.py:463
msgid "Unique identifier field"
msgstr ""
-#: order/serializers.py:485
+#: order/serializers.py:480
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:504
+#: order/serializers.py:499
msgid "An integer quantity must be provided for trackable parts"
msgstr ""
-#: order/serializers.py:544
+#: order/serializers.py:539
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:561
+#: order/serializers.py:556
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:572
+#: order/serializers.py:567
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:847
+#: order/serializers.py:842
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:917
+#: order/serializers.py:913
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:967 order/serializers.py:1089
+#: order/serializers.py:970 order/serializers.py:1092
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:989
+#: order/serializers.py:992
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1102
+#: order/serializers.py:1105
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1126 order/serializers.py:1251
+#: order/serializers.py:1129 order/serializers.py:1254
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1129 order/serializers.py:1254
+#: order/serializers.py:1132 order/serializers.py:1257
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1181
+#: order/serializers.py:1184
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1191
+#: order/serializers.py:1194
msgid "The following serial numbers are already allocated"
msgstr ""
@@ -3770,7 +3766,7 @@ msgid "Edit order"
msgstr ""
#: order/templates/order/order_base.html:47
-#: order/templates/order/sales_order_base.html:60
+#: order/templates/order/sales_order_base.html:61
msgid "Cancel order"
msgstr "取消订单"
@@ -3792,22 +3788,22 @@ msgid "Mark order as complete"
msgstr ""
#: order/templates/order/order_base.html:62
-#: order/templates/order/sales_order_base.html:67
+#: order/templates/order/sales_order_base.html:68
msgid "Complete Order"
msgstr ""
#: order/templates/order/order_base.html:84
-#: order/templates/order/sales_order_base.html:79
+#: order/templates/order/sales_order_base.html:80
msgid "Order Reference"
msgstr ""
#: order/templates/order/order_base.html:89
-#: order/templates/order/sales_order_base.html:84
+#: order/templates/order/sales_order_base.html:85
msgid "Order Description"
msgstr ""
#: order/templates/order/order_base.html:94
-#: order/templates/order/sales_order_base.html:89
+#: order/templates/order/sales_order_base.html:90
msgid "Order Status"
msgstr ""
@@ -3816,13 +3812,13 @@ msgid "No suppplier information available"
msgstr ""
#: order/templates/order/order_base.html:130
-#: order/templates/order/sales_order_base.html:128
+#: order/templates/order/sales_order_base.html:129
msgid "Completed Line Items"
msgstr ""
#: order/templates/order/order_base.html:136
-#: order/templates/order/sales_order_base.html:134
-#: order/templates/order/sales_order_base.html:144
+#: order/templates/order/sales_order_base.html:135
+#: order/templates/order/sales_order_base.html:145
msgid "Incomplete"
msgstr ""
@@ -3832,7 +3828,7 @@ msgid "Issued"
msgstr ""
#: order/templates/order/order_base.html:183
-#: order/templates/order/sales_order_base.html:189
+#: order/templates/order/sales_order_base.html:190
msgid "Total cost"
msgstr ""
@@ -3868,8 +3864,8 @@ msgstr "选择供应商商品"
#: part/templates/part/import_wizard/match_references.html:49
#: templates/js/translated/bom.js:77 templates/js/translated/build.js:427
#: templates/js/translated/build.js:579 templates/js/translated/build.js:1989
-#: templates/js/translated/order.js:712 templates/js/translated/order.js:1144
-#: templates/js/translated/order.js:2387 templates/js/translated/stock.js:570
+#: templates/js/translated/order.js:818 templates/js/translated/order.js:1250
+#: templates/js/translated/order.js:2493 templates/js/translated/stock.js:570
#: templates/js/translated/stock.js:738
#: templates/patterns/wizard/match_fields.html:70
msgid "Remove row"
@@ -3920,7 +3916,7 @@ msgstr ""
#: order/templates/order/purchase_order_detail.html:53
#: order/templates/order/sales_order_detail.html:45
-#: order/templates/order/sales_order_detail.html:273
+#: order/templates/order/sales_order_detail.html:274
msgid "Add Extra Line"
msgstr ""
@@ -3950,27 +3946,32 @@ msgstr ""
msgid "Print packing list"
msgstr ""
-#: order/templates/order/sales_order_base.html:66
-#: order/templates/order/sales_order_base.html:239
+#: order/templates/order/sales_order_base.html:60
+#: templates/js/translated/order.js:211
+msgid "Complete Shipments"
+msgstr ""
+
+#: order/templates/order/sales_order_base.html:67
+#: order/templates/order/sales_order_base.html:250
msgid "Complete Sales Order"
msgstr ""
-#: order/templates/order/sales_order_base.html:102
+#: order/templates/order/sales_order_base.html:103
msgid "This Sales Order has not been fully allocated"
msgstr ""
-#: order/templates/order/sales_order_base.html:122
-#: templates/js/translated/order.js:2143
+#: order/templates/order/sales_order_base.html:123
+#: templates/js/translated/order.js:2249
msgid "Customer Reference"
msgstr ""
-#: order/templates/order/sales_order_base.html:140
+#: order/templates/order/sales_order_base.html:141
#: order/templates/order/sales_order_detail.html:100
#: order/templates/order/so_sidebar.html:11
msgid "Completed Shipments"
msgstr ""
-#: order/templates/order/sales_order_base.html:221
+#: order/templates/order/sales_order_base.html:222
msgid "Edit Sales Order"
msgstr ""
@@ -3992,73 +3993,73 @@ msgstr ""
msgid "New Shipment"
msgstr ""
-#: order/views.py:121
+#: order/views.py:117
msgid "Match Supplier Parts"
msgstr ""
-#: order/views.py:394
+#: order/views.py:390
msgid "Sales order not found"
msgstr ""
-#: order/views.py:400
+#: order/views.py:396
msgid "Price not found"
msgstr ""
-#: order/views.py:403
+#: order/views.py:399
#, python-brace-format
msgid "Updated {part} unit-price to {price}"
msgstr ""
-#: order/views.py:408
+#: order/views.py:404
#, python-brace-format
msgid "Updated {part} unit-price to {price} and quantity to {qty}"
msgstr ""
-#: part/api.py:516
+#: part/api.py:504
msgid "Incoming Purchase Order"
msgstr ""
-#: part/api.py:536
+#: part/api.py:524
msgid "Outgoing Sales Order"
msgstr ""
-#: part/api.py:554
+#: part/api.py:542
msgid "Stock produced by Build Order"
msgstr ""
-#: part/api.py:586
+#: part/api.py:574
msgid "Stock required for Build Order"
msgstr ""
-#: part/api.py:677
+#: part/api.py:665
msgid "Valid"
msgstr ""
-#: part/api.py:678
+#: part/api.py:666
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/api.py:683
+#: part/api.py:671
msgid "This option must be selected"
msgstr ""
-#: part/api.py:1055
+#: part/api.py:1043
msgid "Must be greater than zero"
msgstr "必须大于0"
-#: part/api.py:1059
+#: part/api.py:1047
msgid "Must be a valid quantity"
msgstr "必须是有效的数量"
-#: part/api.py:1074
+#: part/api.py:1062
msgid "Specify location for initial part stock"
msgstr "指定初始初始商品仓储地点"
-#: part/api.py:1105 part/api.py:1109 part/api.py:1124 part/api.py:1128
+#: part/api.py:1093 part/api.py:1097 part/api.py:1112 part/api.py:1116
msgid "This field is required"
msgstr "此字段为必填"
-#: part/bom.py:125 part/models.py:111 part/models.py:886
+#: part/bom.py:125 part/models.py:99 part/models.py:874
#: part/templates/part/category.html:108 part/templates/part/part_base.html:330
msgid "Default Location"
msgstr "默认仓储地点"
@@ -4078,115 +4079,115 @@ msgstr "可用库存"
msgid "On Order"
msgstr ""
-#: part/forms.py:81
+#: part/forms.py:79
msgid "Select part category"
msgstr "选择类别"
-#: part/forms.py:100
+#: part/forms.py:98
msgid "Add parameter template to same level categories"
msgstr ""
-#: part/forms.py:104
+#: part/forms.py:102
msgid "Add parameter template to all categories"
msgstr ""
-#: part/forms.py:124
+#: part/forms.py:122
msgid "Input quantity for price calculation"
msgstr ""
-#: part/models.py:112
+#: part/models.py:100
msgid "Default location for parts in this category"
msgstr "此类别商品的默认仓储地点"
-#: part/models.py:115
+#: part/models.py:103
msgid "Default keywords"
msgstr ""
-#: part/models.py:115
+#: part/models.py:103
msgid "Default keywords for parts in this category"
msgstr "此类别商品的默认关键字"
-#: part/models.py:125 part/models.py:2637 part/templates/part/category.html:15
+#: part/models.py:113 part/models.py:2625 part/templates/part/category.html:15
#: part/templates/part/part_app_base.html:10
msgid "Part Category"
msgstr "商品类别"
-#: part/models.py:126 part/templates/part/category.html:128
+#: part/models.py:114 part/templates/part/category.html:128
#: templates/InvenTree/search.html:95 templates/js/translated/search.js:113
-#: users/models.py:40
+#: users/models.py:38
msgid "Part Categories"
msgstr "商品类别"
-#: part/models.py:367 part/templates/part/cat_link.html:3
+#: part/models.py:355 part/templates/part/cat_link.html:3
#: part/templates/part/category.html:17 part/templates/part/category.html:133
#: part/templates/part/category.html:153
#: part/templates/part/category_sidebar.html:9
#: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82
#: templates/InvenTree/settings/sidebar.html:39
#: templates/js/translated/part.js:1768 templates/js/translated/search.js:99
-#: templates/navbar.html:24 users/models.py:41
+#: templates/navbar.html:24 users/models.py:39
msgid "Parts"
msgstr "商品"
-#: part/models.py:459
+#: part/models.py:447
msgid "Invalid choice for parent part"
msgstr ""
-#: part/models.py:534 part/models.py:546
+#: part/models.py:522 part/models.py:534
#, python-brace-format
msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)"
msgstr ""
-#: part/models.py:676
+#: part/models.py:664
msgid "Next available serial numbers are"
msgstr ""
-#: part/models.py:680
+#: part/models.py:668
msgid "Next available serial number is"
msgstr ""
-#: part/models.py:685
+#: part/models.py:673
msgid "Most recent serial number is"
msgstr ""
-#: part/models.py:781
+#: part/models.py:769
msgid "Duplicate IPN not allowed in part settings"
msgstr "在商品设置中不允许重复的IPN"
-#: part/models.py:810 part/models.py:2690
+#: part/models.py:798 part/models.py:2678
msgid "Part name"
msgstr "商品名称"
-#: part/models.py:817
+#: part/models.py:805
msgid "Is Template"
msgstr ""
-#: part/models.py:818
+#: part/models.py:806
msgid "Is this part a template part?"
msgstr ""
-#: part/models.py:828
+#: part/models.py:816
msgid "Is this part a variant of another part?"
msgstr ""
-#: part/models.py:829
+#: part/models.py:817
msgid "Variant Of"
msgstr ""
-#: part/models.py:835
+#: part/models.py:823
msgid "Part description"
msgstr "商品描述"
-#: part/models.py:840 part/templates/part/category.html:86
+#: part/models.py:828 part/templates/part/category.html:86
#: part/templates/part/part_base.html:294
msgid "Keywords"
msgstr "关键词"
-#: part/models.py:841
+#: part/models.py:829
msgid "Part keywords to improve visibility in search results"
msgstr "提高搜索结果可见性的关键字"
-#: part/models.py:848 part/models.py:2387 part/models.py:2636
+#: part/models.py:836 part/models.py:2375 part/models.py:2624
#: part/templates/part/part_base.html:257
#: part/templates/part/set_category.html:15
#: templates/InvenTree/notifications/notifications.html:65
@@ -4195,432 +4196,432 @@ msgstr "提高搜索结果可见性的关键字"
msgid "Category"
msgstr "类别"
-#: part/models.py:849
+#: part/models.py:837
msgid "Part category"
msgstr "商品类别"
-#: part/models.py:854 part/templates/part/part_base.html:266
+#: part/models.py:842 part/templates/part/part_base.html:266
#: templates/js/translated/part.js:666 templates/js/translated/part.js:1322
#: templates/js/translated/stock.js:1669
msgid "IPN"
msgstr ""
-#: part/models.py:855
+#: part/models.py:843
msgid "Internal Part Number"
msgstr "内部商品编号"
-#: part/models.py:861
+#: part/models.py:849
msgid "Part revision or version number"
msgstr "商品版本号"
-#: part/models.py:862 part/templates/part/part_base.html:273
-#: report/models.py:193 templates/js/translated/part.js:670
+#: part/models.py:850 part/templates/part/part_base.html:273
+#: report/models.py:188 templates/js/translated/part.js:670
msgid "Revision"
msgstr ""
-#: part/models.py:884
+#: part/models.py:872
msgid "Where is this item normally stored?"
msgstr ""
-#: part/models.py:931 part/templates/part/part_base.html:339
+#: part/models.py:919 part/templates/part/part_base.html:339
msgid "Default Supplier"
msgstr ""
-#: part/models.py:932
+#: part/models.py:920
msgid "Default supplier part"
msgstr "默认供应商商品"
-#: part/models.py:939
+#: part/models.py:927
msgid "Default Expiry"
msgstr ""
-#: part/models.py:940
+#: part/models.py:928
msgid "Expiry time (in days) for stock items of this part"
msgstr ""
-#: part/models.py:945 part/templates/part/part_base.html:200
+#: part/models.py:933 part/templates/part/part_base.html:200
msgid "Minimum Stock"
msgstr "最低库存"
-#: part/models.py:946
+#: part/models.py:934
msgid "Minimum allowed stock level"
msgstr ""
-#: part/models.py:953
+#: part/models.py:941
msgid "Stock keeping units for this part"
msgstr ""
-#: part/models.py:959
+#: part/models.py:947
msgid "Can this part be built from other parts?"
msgstr ""
-#: part/models.py:965
+#: part/models.py:953
msgid "Can this part be used to build other parts?"
msgstr ""
-#: part/models.py:971
+#: part/models.py:959
msgid "Does this part have tracking for unique items?"
msgstr ""
-#: part/models.py:976
+#: part/models.py:964
msgid "Can this part be purchased from external suppliers?"
msgstr ""
-#: part/models.py:981
+#: part/models.py:969
msgid "Can this part be sold to customers?"
msgstr "此商品可以销售给客户吗?"
-#: part/models.py:986
+#: part/models.py:974
msgid "Is this part active?"
msgstr ""
-#: part/models.py:991
+#: part/models.py:979
msgid "Is this a virtual part, such as a software product or license?"
msgstr "这是一个虚拟商品,如软件产品或许可证吗?"
-#: part/models.py:996
+#: part/models.py:984
msgid "Part notes - supports Markdown formatting"
msgstr ""
-#: part/models.py:999
+#: part/models.py:987
msgid "BOM checksum"
msgstr ""
-#: part/models.py:999
+#: part/models.py:987
msgid "Stored BOM checksum"
msgstr ""
-#: part/models.py:1002
+#: part/models.py:990
msgid "BOM checked by"
msgstr ""
-#: part/models.py:1004
+#: part/models.py:992
msgid "BOM checked date"
msgstr ""
-#: part/models.py:1008
+#: part/models.py:996
msgid "Creation User"
msgstr "新建用户"
-#: part/models.py:1872
+#: part/models.py:1860
msgid "Sell multiple"
msgstr ""
-#: part/models.py:2437
+#: part/models.py:2425
msgid "Test templates can only be created for trackable parts"
msgstr ""
-#: part/models.py:2454
+#: part/models.py:2442
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2474 templates/js/translated/part.js:1819
+#: part/models.py:2462 templates/js/translated/part.js:1819
#: templates/js/translated/stock.js:1284
msgid "Test Name"
msgstr ""
-#: part/models.py:2475
+#: part/models.py:2463
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:2480
+#: part/models.py:2468
msgid "Test Description"
msgstr ""
-#: part/models.py:2481
+#: part/models.py:2469
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2486 templates/js/translated/part.js:1828
+#: part/models.py:2474 templates/js/translated/part.js:1828
#: templates/js/translated/table_filters.js:294
msgid "Required"
msgstr ""
-#: part/models.py:2487
+#: part/models.py:2475
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2492 templates/js/translated/part.js:1836
+#: part/models.py:2480 templates/js/translated/part.js:1836
msgid "Requires Value"
msgstr ""
-#: part/models.py:2493
+#: part/models.py:2481
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2498 templates/js/translated/part.js:1843
+#: part/models.py:2486 templates/js/translated/part.js:1843
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:2499
+#: part/models.py:2487
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:2510
+#: part/models.py:2498
#, python-brace-format
msgid "Illegal character in template name ({c})"
msgstr ""
-#: part/models.py:2546
+#: part/models.py:2534
msgid "Parameter template name must be unique"
msgstr ""
-#: part/models.py:2554
+#: part/models.py:2542
msgid "Parameter Name"
msgstr ""
-#: part/models.py:2561
+#: part/models.py:2549
msgid "Parameter Units"
msgstr ""
-#: part/models.py:2591
+#: part/models.py:2579
msgid "Parent Part"
msgstr ""
-#: part/models.py:2593 part/models.py:2642 part/models.py:2643
+#: part/models.py:2581 part/models.py:2630 part/models.py:2631
#: templates/InvenTree/settings/settings.html:226
msgid "Parameter Template"
msgstr "参数模板"
-#: part/models.py:2595
+#: part/models.py:2583
msgid "Data"
msgstr ""
-#: part/models.py:2595
+#: part/models.py:2583
msgid "Parameter Value"
msgstr ""
-#: part/models.py:2647 templates/InvenTree/settings/settings.html:235
+#: part/models.py:2635 templates/InvenTree/settings/settings.html:235
msgid "Default Value"
msgstr "默认值"
-#: part/models.py:2648
+#: part/models.py:2636
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:2682
+#: part/models.py:2670
msgid "Part ID or part name"
msgstr ""
-#: part/models.py:2685 templates/js/translated/model_renderers.js:200
+#: part/models.py:2673 templates/js/translated/model_renderers.js:200
msgid "Part ID"
msgstr "商品ID"
-#: part/models.py:2686
+#: part/models.py:2674
msgid "Unique part ID value"
msgstr ""
-#: part/models.py:2689
+#: part/models.py:2677
msgid "Part Name"
msgstr ""
-#: part/models.py:2693
+#: part/models.py:2681
msgid "Part IPN"
msgstr ""
-#: part/models.py:2694
+#: part/models.py:2682
msgid "Part IPN value"
msgstr ""
-#: part/models.py:2697
+#: part/models.py:2685
msgid "Level"
msgstr ""
-#: part/models.py:2698
+#: part/models.py:2686
msgid "BOM level"
msgstr ""
-#: part/models.py:2773
+#: part/models.py:2761
msgid "Select parent part"
msgstr ""
-#: part/models.py:2781
+#: part/models.py:2769
msgid "Sub part"
msgstr ""
-#: part/models.py:2782
+#: part/models.py:2770
msgid "Select part to be used in BOM"
msgstr ""
-#: part/models.py:2788
+#: part/models.py:2776
msgid "BOM quantity for this BOM item"
msgstr ""
-#: part/models.py:2790 part/templates/part/upload_bom.html:58
+#: part/models.py:2778 part/templates/part/upload_bom.html:58
#: templates/js/translated/bom.js:898 templates/js/translated/bom.js:992
#: templates/js/translated/table_filters.js:92
msgid "Optional"
msgstr "可选项"
-#: part/models.py:2790
+#: part/models.py:2778
msgid "This BOM item is optional"
msgstr ""
-#: part/models.py:2793 part/templates/part/upload_bom.html:55
+#: part/models.py:2781 part/templates/part/upload_bom.html:55
msgid "Overage"
msgstr ""
-#: part/models.py:2794
+#: part/models.py:2782
msgid "Estimated build wastage quantity (absolute or percentage)"
msgstr ""
-#: part/models.py:2797
+#: part/models.py:2785
msgid "BOM item reference"
msgstr ""
-#: part/models.py:2800
+#: part/models.py:2788
msgid "BOM item notes"
msgstr ""
-#: part/models.py:2802
+#: part/models.py:2790
msgid "Checksum"
msgstr ""
-#: part/models.py:2802
+#: part/models.py:2790
msgid "BOM line checksum"
msgstr ""
-#: part/models.py:2806 part/templates/part/upload_bom.html:57
+#: part/models.py:2794 part/templates/part/upload_bom.html:57
#: templates/js/translated/bom.js:1009
#: templates/js/translated/table_filters.js:68
#: templates/js/translated/table_filters.js:88
msgid "Inherited"
msgstr "继承项"
-#: part/models.py:2807
+#: part/models.py:2795
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr ""
-#: part/models.py:2812 part/templates/part/upload_bom.html:56
+#: part/models.py:2800 part/templates/part/upload_bom.html:56
#: templates/js/translated/bom.js:1001
msgid "Allow Variants"
msgstr ""
-#: part/models.py:2813
+#: part/models.py:2801
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:2898 stock/models.py:495
+#: part/models.py:2886 stock/models.py:486
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:2907 part/models.py:2909
+#: part/models.py:2895 part/models.py:2897
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:3021
+#: part/models.py:3009
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:3043
+#: part/models.py:3031
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:3055
+#: part/models.py:3043
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:3063
+#: part/models.py:3051
msgid "Substitute part"
msgstr ""
-#: part/models.py:3074
+#: part/models.py:3062
msgid "Part 1"
msgstr ""
-#: part/models.py:3078
+#: part/models.py:3066
msgid "Part 2"
msgstr ""
-#: part/models.py:3078
+#: part/models.py:3066
msgid "Select Related Part"
msgstr ""
-#: part/models.py:3110
+#: part/models.py:3098
msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique"
msgstr ""
-#: part/serializers.py:157 part/serializers.py:189 stock/serializers.py:177
+#: part/serializers.py:152 part/serializers.py:184 stock/serializers.py:169
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:923
+#: part/serializers.py:918
msgid "Select part to copy BOM from"
msgstr ""
-#: part/serializers.py:934
+#: part/serializers.py:929
msgid "Remove Existing Data"
msgstr ""
-#: part/serializers.py:935
+#: part/serializers.py:930
msgid "Remove existing BOM items before copying"
msgstr ""
-#: part/serializers.py:940
+#: part/serializers.py:935
msgid "Include Inherited"
msgstr ""
-#: part/serializers.py:941
+#: part/serializers.py:936
msgid "Include BOM items which are inherited from templated parts"
msgstr ""
-#: part/serializers.py:946
+#: part/serializers.py:941
msgid "Skip Invalid Rows"
msgstr ""
-#: part/serializers.py:947
+#: part/serializers.py:942
msgid "Enable this option to skip invalid rows"
msgstr ""
-#: part/serializers.py:952
+#: part/serializers.py:947
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:953
+#: part/serializers.py:948
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
-#: part/serializers.py:997
+#: part/serializers.py:992
msgid "Clear Existing BOM"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:993
msgid "Delete existing BOM items before uploading"
msgstr ""
-#: part/serializers.py:1025
+#: part/serializers.py:1020
msgid "No part column specified"
msgstr ""
-#: part/serializers.py:1068
+#: part/serializers.py:1063
msgid "Multiple matching parts found"
msgstr ""
-#: part/serializers.py:1071
+#: part/serializers.py:1066
msgid "No matching part found"
msgstr ""
-#: part/serializers.py:1074
+#: part/serializers.py:1069
msgid "Part is not designated as a component"
msgstr ""
-#: part/serializers.py:1083
+#: part/serializers.py:1078
msgid "Quantity not provided"
msgstr ""
-#: part/serializers.py:1091
+#: part/serializers.py:1086
msgid "Invalid quantity"
msgstr ""
-#: part/serializers.py:1110
+#: part/serializers.py:1105
msgid "At least one BOM item is required"
msgstr ""
-#: part/tasks.py:15
+#: part/tasks.py:14
msgid "Low stock notification"
msgstr ""
-#: part/tasks.py:16
+#: part/tasks.py:15
#, python-brace-format
msgid "The available stock for {part.name} has fallen below the configured minimum level"
msgstr ""
@@ -5100,7 +5101,7 @@ msgstr ""
msgid "This part is a variant of %(link)s"
msgstr ""
-#: part/templates/part/part_base.html:194 templates/js/translated/order.js:3150
+#: part/templates/part/part_base.html:194 templates/js/translated/order.js:3305
#: templates/js/translated/table_filters.js:193
msgid "In Stock"
msgstr ""
@@ -5391,93 +5392,93 @@ msgstr ""
msgid "Create a new variant of template '%(full_name)s'."
msgstr ""
-#: part/templatetags/inventree_extras.py:191
+#: part/templatetags/inventree_extras.py:186
msgid "Unknown database"
msgstr ""
-#: part/templatetags/inventree_extras.py:228
+#: part/templatetags/inventree_extras.py:223
#, python-brace-format
msgid "{title} v{version}"
msgstr ""
-#: part/views.py:85
+#: part/views.py:74
msgid "Set Part Category"
msgstr "设置商品类别"
-#: part/views.py:135
+#: part/views.py:124
#, python-brace-format
msgid "Set category for {n} parts"
msgstr "为 {n} 个商品设置类别"
-#: part/views.py:207
+#: part/views.py:196
msgid "Match References"
msgstr ""
-#: part/views.py:508
+#: part/views.py:497
msgid "None"
msgstr ""
-#: part/views.py:567
+#: part/views.py:556
msgid "Part QR Code"
msgstr "商品二维码"
-#: part/views.py:669
+#: part/views.py:658
msgid "Select Part Image"
msgstr "选择商品图像"
-#: part/views.py:695
+#: part/views.py:684
msgid "Updated part image"
msgstr "更新商品图像"
-#: part/views.py:698
+#: part/views.py:687
msgid "Part image not found"
msgstr "未找到商品图像"
-#: part/views.py:786
+#: part/views.py:775
msgid "Confirm Part Deletion"
msgstr "确认删除商品"
-#: part/views.py:793
+#: part/views.py:782
msgid "Part was deleted"
msgstr "商品已删除"
-#: part/views.py:802
+#: part/views.py:791
msgid "Part Pricing"
msgstr "商品价格"
-#: part/views.py:951
+#: part/views.py:940
msgid "Create Part Parameter Template"
msgstr ""
-#: part/views.py:961
+#: part/views.py:950
msgid "Edit Part Parameter Template"
msgstr ""
-#: part/views.py:968
+#: part/views.py:957
msgid "Delete Part Parameter Template"
msgstr ""
-#: part/views.py:1010
+#: part/views.py:999
msgid "Delete Part Category"
msgstr "删除商品类别"
-#: part/views.py:1016
+#: part/views.py:1005
msgid "Part category was deleted"
msgstr "商品类别已删除"
-#: part/views.py:1025
+#: part/views.py:1014
msgid "Create Category Parameter Template"
msgstr "创建类别参数模板"
-#: part/views.py:1126
+#: part/views.py:1115
msgid "Edit Category Parameter Template"
msgstr "编辑类别参数模板"
-#: part/views.py:1182
+#: part/views.py:1171
msgid "Delete Category Parameter Template"
msgstr "删除类别参数模板"
-#: plugin/apps.py:49
+#: plugin/apps.py:48
msgid "Your enviroment has an outdated git version. This prevents InvenTree from loading plugin details."
msgstr ""
@@ -5489,47 +5490,47 @@ msgstr "未指定操作"
msgid "No matching action found"
msgstr "未找到指定操作"
-#: plugin/base/barcodes/api.py:53 plugin/base/barcodes/api.py:153
+#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:152
msgid "Must provide barcode_data parameter"
msgstr "必须提供条码数据参数"
-#: plugin/base/barcodes/api.py:129
+#: plugin/base/barcodes/api.py:128
msgid "No match found for barcode data"
msgstr "未找到匹配条形码数据"
-#: plugin/base/barcodes/api.py:131
+#: plugin/base/barcodes/api.py:130
msgid "Match found for barcode data"
msgstr "找到匹配条形码数据"
-#: plugin/base/barcodes/api.py:156
+#: plugin/base/barcodes/api.py:155
msgid "Must provide stockitem parameter"
msgstr "必须提供库存项参数"
-#: plugin/base/barcodes/api.py:163
+#: plugin/base/barcodes/api.py:162
msgid "No matching stock item found"
msgstr "未找到匹配的库存项"
-#: plugin/base/barcodes/api.py:193
+#: plugin/base/barcodes/api.py:192
msgid "Barcode already matches Stock Item"
msgstr ""
-#: plugin/base/barcodes/api.py:197
+#: plugin/base/barcodes/api.py:196
msgid "Barcode already matches Stock Location"
msgstr ""
-#: plugin/base/barcodes/api.py:201
+#: plugin/base/barcodes/api.py:200
msgid "Barcode already matches Part"
msgstr ""
-#: plugin/base/barcodes/api.py:207 plugin/base/barcodes/api.py:219
+#: plugin/base/barcodes/api.py:206 plugin/base/barcodes/api.py:218
msgid "Barcode hash already matches Stock Item"
msgstr ""
-#: plugin/base/barcodes/api.py:225
+#: plugin/base/barcodes/api.py:224
msgid "Barcode associated with Stock Item"
msgstr ""
-#: plugin/base/label/label.py:40
+#: plugin/base/label/label.py:39
msgid "Label printing failed"
msgstr ""
@@ -5551,51 +5552,51 @@ msgstr ""
msgid "Allow sending of emails for event notifications"
msgstr ""
-#: plugin/models.py:36
+#: plugin/models.py:35
msgid "Plugin Metadata"
msgstr ""
-#: plugin/models.py:37
+#: plugin/models.py:36
msgid "JSON metadata field, for use by external plugins"
msgstr ""
-#: plugin/models.py:86
+#: plugin/models.py:85
msgid "Plugin Configuration"
msgstr ""
-#: plugin/models.py:87
+#: plugin/models.py:86
msgid "Plugin Configurations"
msgstr ""
-#: plugin/models.py:92
+#: plugin/models.py:91
msgid "Key"
msgstr ""
-#: plugin/models.py:93
+#: plugin/models.py:92
msgid "Key of plugin"
msgstr ""
-#: plugin/models.py:101
+#: plugin/models.py:100
msgid "PluginName of the plugin"
msgstr ""
-#: plugin/models.py:107
+#: plugin/models.py:106
msgid "Is the plugin active"
msgstr ""
-#: plugin/models.py:180
+#: plugin/models.py:179
msgid "Plugin"
msgstr ""
-#: plugin/models.py:254
+#: plugin/models.py:253
msgid "Method"
msgstr ""
-#: plugin/plugin.py:247
+#: plugin/plugin.py:246
msgid "No author found"
msgstr ""
-#: plugin/plugin.py:261
+#: plugin/plugin.py:260
msgid "No date found"
msgstr ""
@@ -5663,92 +5664,96 @@ msgstr ""
msgid "Either packagename of URL must be provided"
msgstr ""
-#: report/api.py:233 report/api.py:280
+#: report/api.py:191
+msgid "No valid objects provided to template"
+msgstr "没有为模板提供有效对象"
+
+#: report/api.py:223 report/api.py:270
#, python-brace-format
msgid "Template file '{template}' is missing or does not exist"
msgstr ""
-#: report/models.py:175
+#: report/models.py:170
msgid "Template name"
msgstr ""
-#: report/models.py:181
+#: report/models.py:176
msgid "Report template file"
msgstr ""
-#: report/models.py:188
+#: report/models.py:183
msgid "Report template description"
msgstr ""
-#: report/models.py:194
+#: report/models.py:189
msgid "Report revision number (auto-increments)"
msgstr ""
-#: report/models.py:285
+#: report/models.py:280
msgid "Pattern for generating report filenames"
msgstr ""
-#: report/models.py:292
+#: report/models.py:287
msgid "Report template is enabled"
msgstr ""
-#: report/models.py:316
+#: report/models.py:311
msgid "StockItem query filters (comma-separated list of key=value pairs)"
msgstr ""
-#: report/models.py:324
+#: report/models.py:319
msgid "Include Installed Tests"
msgstr ""
-#: report/models.py:325
+#: report/models.py:320
msgid "Include test results for stock items installed inside assembled item"
msgstr ""
-#: report/models.py:375
+#: report/models.py:370
msgid "Build Filters"
msgstr ""
-#: report/models.py:376
+#: report/models.py:371
msgid "Build query filters (comma-separated list of key=value pairs"
msgstr ""
-#: report/models.py:418
+#: report/models.py:413
msgid "Part Filters"
msgstr "商品过滤器"
-#: report/models.py:419
+#: report/models.py:414
msgid "Part query filters (comma-separated list of key=value pairs"
msgstr ""
-#: report/models.py:453
+#: report/models.py:448
msgid "Purchase order query filters"
msgstr ""
-#: report/models.py:492
+#: report/models.py:487
msgid "Sales order query filters"
msgstr ""
-#: report/models.py:547
+#: report/models.py:542
msgid "Snippet"
msgstr ""
-#: report/models.py:548
+#: report/models.py:543
msgid "Report snippet file"
msgstr ""
-#: report/models.py:552
+#: report/models.py:547
msgid "Snippet file description"
msgstr ""
-#: report/models.py:587
+#: report/models.py:582
msgid "Asset"
msgstr ""
-#: report/models.py:588
+#: report/models.py:583
msgid "Report asset file"
msgstr ""
-#: report/models.py:591
+#: report/models.py:586
msgid "Asset file description"
msgstr ""
@@ -5765,12 +5770,12 @@ msgid "Stock Item Test Report"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:79
-#: stock/models.py:664 stock/templates/stock/item_base.html:162
+#: stock/models.py:655 stock/templates/stock/item_base.html:162
#: templates/js/translated/build.js:420 templates/js/translated/build.js:572
#: templates/js/translated/build.js:1178 templates/js/translated/build.js:1688
#: templates/js/translated/model_renderers.js:106
-#: templates/js/translated/order.js:108 templates/js/translated/order.js:2836
-#: templates/js/translated/order.js:2925 templates/js/translated/stock.js:435
+#: templates/js/translated/order.js:109 templates/js/translated/order.js:2991
+#: templates/js/translated/order.js:3080 templates/js/translated/stock.js:435
msgid "Serial Number"
msgstr "序列号"
@@ -5779,19 +5784,19 @@ msgid "Test Results"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:93
-#: stock/models.py:2192
+#: stock/models.py:2183
msgid "Test"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:94
-#: stock/models.py:2198
+#: stock/models.py:2189
msgid "Result"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:97
#: templates/InvenTree/settings/plugin.html:51
#: templates/InvenTree/settings/plugin_settings.html:38
-#: templates/js/translated/order.js:1469 templates/js/translated/stock.js:2345
+#: templates/js/translated/order.js:1575 templates/js/translated/stock.js:2345
msgid "Date"
msgstr ""
@@ -5814,362 +5819,362 @@ msgstr ""
msgid "Serial"
msgstr ""
-#: stock/api.py:554
+#: stock/api.py:542
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:561
+#: stock/api.py:549
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:586
+#: stock/api.py:574
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/models.py:91 stock/models.py:759
+#: stock/models.py:82 stock/models.py:750
#: stock/templates/stock/item_base.html:417
msgid "Owner"
msgstr ""
-#: stock/models.py:92 stock/models.py:760
+#: stock/models.py:83 stock/models.py:751
msgid "Select Owner"
msgstr ""
-#: stock/models.py:468
+#: stock/models.py:459
msgid "StockItem with this serial number already exists"
msgstr ""
-#: stock/models.py:512
+#: stock/models.py:503
#, python-brace-format
msgid "Part type ('{pf}') must be {pe}"
msgstr "商品类型 ('{pf}') 必须是 {pe}"
-#: stock/models.py:522 stock/models.py:531
+#: stock/models.py:513 stock/models.py:522
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:523
+#: stock/models.py:514
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:545
+#: stock/models.py:536
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:551
+#: stock/models.py:542
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:565
+#: stock/models.py:556
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:608
+#: stock/models.py:599
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:617
+#: stock/models.py:608
msgid "Base part"
msgstr ""
-#: stock/models.py:625
+#: stock/models.py:616
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:631 stock/templates/stock/location.html:17
+#: stock/models.py:622 stock/templates/stock/location.html:17
#: stock/templates/stock/stock_app_base.html:8
msgid "Stock Location"
msgstr "仓储地点"
-#: stock/models.py:634
+#: stock/models.py:625
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:641
+#: stock/models.py:632
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:647 stock/templates/stock/item_base.html:288
+#: stock/models.py:638 stock/templates/stock/item_base.html:288
msgid "Installed In"
msgstr ""
-#: stock/models.py:650
+#: stock/models.py:641
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:666
+#: stock/models.py:657
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:680
+#: stock/models.py:671
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:685
+#: stock/models.py:676
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:694
+#: stock/models.py:685
msgid "Source Build"
msgstr ""
-#: stock/models.py:696
+#: stock/models.py:687
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:707
+#: stock/models.py:698
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:710
+#: stock/models.py:701
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:716
+#: stock/models.py:707
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:722 stock/templates/stock/item_base.html:199
+#: stock/models.py:713 stock/templates/stock/item_base.html:199
#: templates/js/translated/stock.js:1822
msgid "Expiry Date"
msgstr ""
-#: stock/models.py:723
+#: stock/models.py:714
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:736
+#: stock/models.py:727
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:736
+#: stock/models.py:727
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:746 stock/templates/stock/item.html:137
+#: stock/models.py:737 stock/templates/stock/item.html:137
msgid "Stock Item Notes"
msgstr ""
-#: stock/models.py:755
+#: stock/models.py:746
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:787
+#: stock/models.py:778
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1307
+#: stock/models.py:1298
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1313
+#: stock/models.py:1304
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1319
+#: stock/models.py:1310
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({n})"
msgstr ""
-#: stock/models.py:1322
+#: stock/models.py:1313
msgid "Serial numbers must be a list of integers"
msgstr ""
-#: stock/models.py:1325
+#: stock/models.py:1316
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1332
+#: stock/models.py:1323
#, python-brace-format
msgid "Serial numbers already exist: {exists}"
msgstr ""
-#: stock/models.py:1403
+#: stock/models.py:1394
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:1406
+#: stock/models.py:1397
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:1409
+#: stock/models.py:1400
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:1412
+#: stock/models.py:1403
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:1415
+#: stock/models.py:1406
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:1418
+#: stock/models.py:1409
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:1425 stock/serializers.py:871
+#: stock/models.py:1416 stock/serializers.py:863
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:1429
+#: stock/models.py:1420
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:1433
+#: stock/models.py:1424
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:1437
+#: stock/models.py:1428
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:1609
+#: stock/models.py:1600
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2112
+#: stock/models.py:2103
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2169
+#: stock/models.py:2160
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:2175
+#: stock/models.py:2166
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:2193
+#: stock/models.py:2184
msgid "Test name"
msgstr ""
-#: stock/models.py:2199
+#: stock/models.py:2190
msgid "Test result"
msgstr ""
-#: stock/models.py:2205
+#: stock/models.py:2196
msgid "Test output value"
msgstr ""
-#: stock/models.py:2212
+#: stock/models.py:2203
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:2218
+#: stock/models.py:2209
msgid "Test notes"
msgstr ""
-#: stock/serializers.py:170
+#: stock/serializers.py:162
msgid "Purchase price of this stock item"
msgstr ""
-#: stock/serializers.py:291
+#: stock/serializers.py:283
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:306
+#: stock/serializers.py:298
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:312
+#: stock/serializers.py:304
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:323 stock/serializers.py:828 stock/serializers.py:1069
+#: stock/serializers.py:315 stock/serializers.py:820 stock/serializers.py:1061
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:330
+#: stock/serializers.py:322
msgid "Optional note field"
msgstr ""
-#: stock/serializers.py:343
+#: stock/serializers.py:335
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:360
+#: stock/serializers.py:352
msgid "Serial numbers already exist"
msgstr "序列号已存在"
-#: stock/serializers.py:402
+#: stock/serializers.py:394
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:418
+#: stock/serializers.py:410
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:425
+#: stock/serializers.py:417
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:463
+#: stock/serializers.py:455
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:468
+#: stock/serializers.py:460
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:685
+#: stock/serializers.py:677
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:689
+#: stock/serializers.py:681
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:693
+#: stock/serializers.py:685
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:723
+#: stock/serializers.py:715
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:729
+#: stock/serializers.py:721
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:737
+#: stock/serializers.py:729
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:747 stock/serializers.py:977
+#: stock/serializers.py:739 stock/serializers.py:969
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:835
+#: stock/serializers.py:827
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:840
+#: stock/serializers.py:832
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:841
+#: stock/serializers.py:833
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:846
+#: stock/serializers.py:838
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:847
+#: stock/serializers.py:839
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:857
+#: stock/serializers.py:849
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:939
+#: stock/serializers.py:931
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:967
+#: stock/serializers.py:959
msgid "Stock transaction notes"
msgstr ""
@@ -6482,7 +6487,7 @@ msgid "Sublocations"
msgstr ""
#: stock/templates/stock/location.html:156 templates/InvenTree/search.html:164
-#: templates/js/translated/search.js:153 users/models.py:42
+#: templates/js/translated/search.js:153 users/models.py:40
msgid "Stock Locations"
msgstr "仓储地点"
@@ -6534,7 +6539,7 @@ msgstr ""
msgid "Child Items"
msgstr ""
-#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:227
+#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:221
msgid "Convert Stock Item"
msgstr ""
@@ -6559,55 +6564,55 @@ msgstr ""
msgid "Are you sure you want to delete this stock tracking entry?"
msgstr ""
-#: stock/views.py:125
+#: stock/views.py:119
msgid "Stock Location QR code"
msgstr "仓储地点二维码"
-#: stock/views.py:144
+#: stock/views.py:138
msgid "Return to Stock"
msgstr ""
-#: stock/views.py:153
+#: stock/views.py:147
msgid "Specify a valid location"
msgstr "指定一个有效仓储地点"
-#: stock/views.py:164
+#: stock/views.py:158
msgid "Stock item returned from customer"
msgstr ""
-#: stock/views.py:175
+#: stock/views.py:169
msgid "Delete All Test Data"
msgstr ""
-#: stock/views.py:192
+#: stock/views.py:186
msgid "Confirm test data deletion"
msgstr ""
-#: stock/views.py:193
+#: stock/views.py:187
msgid "Check the confirmation box"
msgstr "选中确认框"
-#: stock/views.py:208
+#: stock/views.py:202
msgid "Stock Item QR Code"
msgstr ""
-#: stock/views.py:264
+#: stock/views.py:258
msgid "Delete Stock Location"
msgstr "删除仓储地点"
-#: stock/views.py:277
+#: stock/views.py:271
msgid "Delete Stock Item"
msgstr ""
-#: stock/views.py:288
+#: stock/views.py:282
msgid "Delete Stock Tracking Entry"
msgstr ""
-#: stock/views.py:295
+#: stock/views.py:289
msgid "Edit Stock Tracking Entry"
msgstr ""
-#: stock/views.py:304
+#: stock/views.py:298
msgid "Add Stock Tracking Entry"
msgstr ""
@@ -6881,7 +6886,7 @@ msgid "Install Plugin"
msgstr ""
#: templates/InvenTree/settings/plugin.html:48 templates/navbar.html:137
-#: users/models.py:39
+#: users/models.py:37
msgid "Admin"
msgstr "管理员"
@@ -7326,9 +7331,9 @@ msgstr ""
#: templates/about.html:11 templates/about.html:105
#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621
-#: templates/js/translated/modals.js:55 templates/js/translated/modals.js:591
-#: templates/js/translated/modals.js:685 templates/js/translated/modals.js:993
-#: templates/js/translated/order.js:807 templates/modals.html:15
+#: templates/js/translated/modals.js:55 templates/js/translated/modals.js:594
+#: templates/js/translated/modals.js:688 templates/js/translated/modals.js:996
+#: templates/js/translated/order.js:913 templates/modals.html:15
#: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50
msgid "Close"
msgstr ""
@@ -7639,11 +7644,11 @@ msgstr ""
msgid "Remote image must not exceed maximum allowable file size"
msgstr ""
-#: templates/js/translated/api.js:190 templates/js/translated/modals.js:1063
+#: templates/js/translated/api.js:190 templates/js/translated/modals.js:1066
msgid "No Response"
msgstr ""
-#: templates/js/translated/api.js:191 templates/js/translated/modals.js:1064
+#: templates/js/translated/api.js:191 templates/js/translated/modals.js:1067
msgid "No response from the InvenTree server"
msgstr ""
@@ -7655,27 +7660,27 @@ msgstr ""
msgid "API request returned error code 400"
msgstr ""
-#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1073
+#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1076
msgid "Error 401: Not Authenticated"
msgstr ""
-#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1074
+#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1077
msgid "Authentication credentials not supplied"
msgstr ""
-#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1078
+#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1081
msgid "Error 403: Permission Denied"
msgstr ""
-#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1079
+#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1082
msgid "You do not have the required permissions to access this function"
msgstr ""
-#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1083
+#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1086
msgid "Error 404: Resource Not Found"
msgstr ""
-#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1084
+#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1087
msgid "The requested resource could not be located on the server"
msgstr ""
@@ -7687,11 +7692,11 @@ msgstr ""
msgid "HTTP method not allowed at URL"
msgstr ""
-#: templates/js/translated/api.js:222 templates/js/translated/modals.js:1088
+#: templates/js/translated/api.js:222 templates/js/translated/modals.js:1091
msgid "Error 408: Timeout"
msgstr ""
-#: templates/js/translated/api.js:223 templates/js/translated/modals.js:1089
+#: templates/js/translated/api.js:223 templates/js/translated/modals.js:1092
msgid "Connection timeout while requesting data from server"
msgstr ""
@@ -7760,7 +7765,7 @@ msgid "Unknown response from server"
msgstr ""
#: templates/js/translated/barcode.js:182
-#: templates/js/translated/modals.js:1053
+#: templates/js/translated/modals.js:1056
msgid "Invalid server response"
msgstr ""
@@ -7842,12 +7847,12 @@ msgid "Download BOM Template"
msgstr ""
#: templates/js/translated/bom.js:253 templates/js/translated/bom.js:287
-#: templates/js/translated/order.js:588 templates/js/translated/tables.js:53
+#: templates/js/translated/order.js:694 templates/js/translated/tables.js:53
msgid "Format"
msgstr ""
#: templates/js/translated/bom.js:254 templates/js/translated/bom.js:288
-#: templates/js/translated/order.js:589
+#: templates/js/translated/order.js:695
msgid "Select file format"
msgstr ""
@@ -8147,12 +8152,12 @@ msgid "No required tests for this build"
msgstr ""
#: templates/js/translated/build.js:1727 templates/js/translated/build.js:2556
-#: templates/js/translated/order.js:2873
+#: templates/js/translated/order.js:3028
msgid "Edit stock allocation"
msgstr ""
#: templates/js/translated/build.js:1729 templates/js/translated/build.js:2557
-#: templates/js/translated/order.js:2874
+#: templates/js/translated/order.js:3029
msgid "Delete stock allocation"
msgstr ""
@@ -8181,11 +8186,11 @@ msgid "Sufficient stock available"
msgstr ""
#: templates/js/translated/build.js:1856 templates/js/translated/build.js:2101
-#: templates/js/translated/build.js:2552 templates/js/translated/order.js:3160
+#: templates/js/translated/build.js:2552 templates/js/translated/order.js:3315
msgid "Allocated"
msgstr ""
-#: templates/js/translated/build.js:1904 templates/js/translated/order.js:3240
+#: templates/js/translated/build.js:1904 templates/js/translated/order.js:3395
msgid "Build stock"
msgstr ""
@@ -8193,21 +8198,21 @@ msgstr ""
msgid "Order stock"
msgstr ""
-#: templates/js/translated/build.js:1911 templates/js/translated/order.js:3233
+#: templates/js/translated/build.js:1911 templates/js/translated/order.js:3388
msgid "Allocate stock"
msgstr ""
#: templates/js/translated/build.js:1950 templates/js/translated/label.js:172
-#: templates/js/translated/order.js:635 templates/js/translated/order.js:2449
+#: templates/js/translated/order.js:741 templates/js/translated/order.js:2555
#: templates/js/translated/report.js:225
msgid "Select Parts"
msgstr "选择商品"
-#: templates/js/translated/build.js:1951 templates/js/translated/order.js:2450
+#: templates/js/translated/build.js:1951 templates/js/translated/order.js:2556
msgid "You must select at least one part to allocate"
msgstr ""
-#: templates/js/translated/build.js:2000 templates/js/translated/order.js:2398
+#: templates/js/translated/build.js:2000 templates/js/translated/order.js:2504
msgid "Specify stock allocation quantity"
msgstr ""
@@ -8219,7 +8224,7 @@ msgstr ""
msgid "All selected parts have been fully allocated"
msgstr ""
-#: templates/js/translated/build.js:2089 templates/js/translated/order.js:2464
+#: templates/js/translated/build.js:2089 templates/js/translated/order.js:2570
msgid "Select source location (leave blank to take from all locations)"
msgstr ""
@@ -8227,11 +8232,11 @@ msgstr ""
msgid "Allocate Stock Items to Build Order"
msgstr ""
-#: templates/js/translated/build.js:2128 templates/js/translated/order.js:2512
+#: templates/js/translated/build.js:2128 templates/js/translated/order.js:2667
msgid "No matching stock locations"
msgstr ""
-#: templates/js/translated/build.js:2200 templates/js/translated/order.js:2589
+#: templates/js/translated/build.js:2200 templates/js/translated/order.js:2744
msgid "No matching stock items"
msgstr ""
@@ -8305,7 +8310,7 @@ msgstr "编辑制造商商品"
msgid "Delete Manufacturer Part"
msgstr "删除制造商商品"
-#: templates/js/translated/company.js:165 templates/js/translated/order.js:385
+#: templates/js/translated/company.js:165 templates/js/translated/order.js:491
msgid "Add Supplier"
msgstr "添加供应商"
@@ -8440,40 +8445,40 @@ msgstr ""
msgid "View operation not allowed"
msgstr ""
-#: templates/js/translated/forms.js:641
+#: templates/js/translated/forms.js:646
msgid "Keep this form open"
msgstr ""
-#: templates/js/translated/forms.js:716
+#: templates/js/translated/forms.js:746
msgid "Enter a valid number"
msgstr ""
-#: templates/js/translated/forms.js:1208 templates/modals.html:19
+#: templates/js/translated/forms.js:1238 templates/modals.html:19
#: templates/modals.html:43
msgid "Form errors exist"
msgstr ""
-#: templates/js/translated/forms.js:1634
+#: templates/js/translated/forms.js:1671
msgid "No results found"
msgstr ""
-#: templates/js/translated/forms.js:1849 templates/search.html:29
+#: templates/js/translated/forms.js:1886 templates/search.html:29
msgid "Searching"
msgstr ""
-#: templates/js/translated/forms.js:2102
+#: templates/js/translated/forms.js:2139
msgid "Clear input"
msgstr ""
-#: templates/js/translated/forms.js:2567
+#: templates/js/translated/forms.js:2605
msgid "File Column"
msgstr ""
-#: templates/js/translated/forms.js:2567
+#: templates/js/translated/forms.js:2605
msgid "Field Name"
msgstr ""
-#: templates/js/translated/forms.js:2579
+#: templates/js/translated/forms.js:2617
msgid "Select Columns"
msgstr ""
@@ -8547,62 +8552,62 @@ msgstr "已选择库存项"
msgid "Select Label Template"
msgstr "选择标签模板"
-#: templates/js/translated/modals.js:78 templates/js/translated/modals.js:138
-#: templates/js/translated/modals.js:617
+#: templates/js/translated/modals.js:81 templates/js/translated/modals.js:141
+#: templates/js/translated/modals.js:620
msgid "Cancel"
msgstr "取消"
-#: templates/js/translated/modals.js:79 templates/js/translated/modals.js:137
-#: templates/js/translated/modals.js:684 templates/js/translated/modals.js:992
+#: templates/js/translated/modals.js:82 templates/js/translated/modals.js:140
+#: templates/js/translated/modals.js:687 templates/js/translated/modals.js:995
#: templates/modals.html:28 templates/modals.html:51
msgid "Submit"
msgstr ""
-#: templates/js/translated/modals.js:136
+#: templates/js/translated/modals.js:139
msgid "Form Title"
msgstr ""
-#: templates/js/translated/modals.js:399
+#: templates/js/translated/modals.js:402
msgid "Waiting for server..."
msgstr ""
-#: templates/js/translated/modals.js:558
+#: templates/js/translated/modals.js:561
msgid "Show Error Information"
msgstr ""
-#: templates/js/translated/modals.js:616
+#: templates/js/translated/modals.js:619
msgid "Accept"
msgstr ""
-#: templates/js/translated/modals.js:673
+#: templates/js/translated/modals.js:676
msgid "Loading Data"
msgstr ""
-#: templates/js/translated/modals.js:944
+#: templates/js/translated/modals.js:947
msgid "Invalid response from server"
msgstr ""
-#: templates/js/translated/modals.js:944
+#: templates/js/translated/modals.js:947
msgid "Form data missing from server response"
msgstr ""
-#: templates/js/translated/modals.js:956
+#: templates/js/translated/modals.js:959
msgid "Error posting form data"
msgstr ""
-#: templates/js/translated/modals.js:1053
+#: templates/js/translated/modals.js:1056
msgid "JSON response missing form data"
msgstr ""
-#: templates/js/translated/modals.js:1068
+#: templates/js/translated/modals.js:1071
msgid "Error 400: Bad Request"
msgstr ""
-#: templates/js/translated/modals.js:1069
+#: templates/js/translated/modals.js:1072
msgid "Server returned error code 400"
msgstr ""
-#: templates/js/translated/modals.js:1092
+#: templates/js/translated/modals.js:1095
msgid "Error requesting form data"
msgstr ""
@@ -8660,361 +8665,377 @@ msgstr ""
msgid "Notifications will load here"
msgstr ""
-#: templates/js/translated/order.js:84
+#: templates/js/translated/order.js:85
msgid "No stock items have been allocated to this shipment"
msgstr ""
-#: templates/js/translated/order.js:89
+#: templates/js/translated/order.js:90
msgid "The following stock items will be shipped"
msgstr ""
-#: templates/js/translated/order.js:129
+#: templates/js/translated/order.js:130
msgid "Complete Shipment"
msgstr ""
-#: templates/js/translated/order.js:135
+#: templates/js/translated/order.js:141
msgid "Confirm Shipment"
msgstr ""
-#: templates/js/translated/order.js:157
+#: templates/js/translated/order.js:197
+msgid "No pending shipments found"
+msgstr ""
+
+#: templates/js/translated/order.js:201
+msgid "No stock items have been allocated to pending shipments"
+msgstr ""
+
+#: templates/js/translated/order.js:233
+msgid "Skip"
+msgstr ""
+
+#: templates/js/translated/order.js:263
msgid "Complete Purchase Order"
msgstr ""
-#: templates/js/translated/order.js:163
+#: templates/js/translated/order.js:269
msgid "Mark this order as complete?"
msgstr ""
-#: templates/js/translated/order.js:169
+#: templates/js/translated/order.js:275
msgid "All line items have been received"
msgstr ""
-#: templates/js/translated/order.js:174
+#: templates/js/translated/order.js:280
msgid "This order has line items which have not been marked as received."
msgstr ""
-#: templates/js/translated/order.js:175
+#: templates/js/translated/order.js:281
msgid "Completing this order means that the order and line items will no longer be editable."
msgstr ""
-#: templates/js/translated/order.js:198
+#: templates/js/translated/order.js:304
msgid "Cancel Purchase Order"
msgstr ""
-#: templates/js/translated/order.js:203
+#: templates/js/translated/order.js:309
msgid "Are you sure you wish to cancel this purchase order?"
msgstr ""
-#: templates/js/translated/order.js:209
+#: templates/js/translated/order.js:315
msgid "This purchase order can not be cancelled"
msgstr ""
-#: templates/js/translated/order.js:232
+#: templates/js/translated/order.js:338
msgid "Issue Purchase Order"
msgstr ""
-#: templates/js/translated/order.js:237
+#: templates/js/translated/order.js:343
msgid "After placing this purchase order, line items will no longer be editable."
msgstr ""
-#: templates/js/translated/order.js:259
+#: templates/js/translated/order.js:365
msgid "Cancel Sales Order"
msgstr ""
-#: templates/js/translated/order.js:264
+#: templates/js/translated/order.js:370
msgid "Cancelling this order means that the order will no longer be editable."
msgstr ""
-#: templates/js/translated/order.js:318
+#: templates/js/translated/order.js:424
msgid "Create New Shipment"
msgstr ""
-#: templates/js/translated/order.js:343
+#: templates/js/translated/order.js:449
msgid "Add Customer"
msgstr ""
-#: templates/js/translated/order.js:368
+#: templates/js/translated/order.js:474
msgid "Create Sales Order"
msgstr ""
-#: templates/js/translated/order.js:585
+#: templates/js/translated/order.js:691
msgid "Export Order"
msgstr ""
-#: templates/js/translated/order.js:636
+#: templates/js/translated/order.js:742
msgid "At least one purchaseable part must be selected"
msgstr ""
-#: templates/js/translated/order.js:661
+#: templates/js/translated/order.js:767
msgid "Quantity to order"
msgstr ""
-#: templates/js/translated/order.js:670
+#: templates/js/translated/order.js:776
msgid "New supplier part"
msgstr ""
-#: templates/js/translated/order.js:688
+#: templates/js/translated/order.js:794
msgid "New purchase order"
msgstr ""
-#: templates/js/translated/order.js:721
+#: templates/js/translated/order.js:827
msgid "Add to purchase order"
msgstr ""
-#: templates/js/translated/order.js:830
+#: templates/js/translated/order.js:936
msgid "No matching supplier parts"
msgstr ""
-#: templates/js/translated/order.js:845
+#: templates/js/translated/order.js:951
msgid "No matching purchase orders"
msgstr ""
-#: templates/js/translated/order.js:1001
+#: templates/js/translated/order.js:1107
msgid "Select Line Items"
msgstr ""
-#: templates/js/translated/order.js:1002
+#: templates/js/translated/order.js:1108
msgid "At least one line item must be selected"
msgstr ""
-#: templates/js/translated/order.js:1022 templates/js/translated/order.js:1121
+#: templates/js/translated/order.js:1128 templates/js/translated/order.js:1227
msgid "Add batch code"
msgstr ""
-#: templates/js/translated/order.js:1028 templates/js/translated/order.js:1132
+#: templates/js/translated/order.js:1134 templates/js/translated/order.js:1238
msgid "Add serial numbers"
msgstr ""
-#: templates/js/translated/order.js:1040
+#: templates/js/translated/order.js:1146
msgid "Quantity to receive"
msgstr ""
-#: templates/js/translated/order.js:1104 templates/js/translated/stock.js:2085
+#: templates/js/translated/order.js:1210 templates/js/translated/stock.js:2085
msgid "Stock Status"
msgstr ""
-#: templates/js/translated/order.js:1195
+#: templates/js/translated/order.js:1301
msgid "Order Code"
msgstr "订单编码"
-#: templates/js/translated/order.js:1196
+#: templates/js/translated/order.js:1302
msgid "Ordered"
msgstr ""
-#: templates/js/translated/order.js:1198
+#: templates/js/translated/order.js:1304
msgid "Quantity to Receive"
msgstr ""
-#: templates/js/translated/order.js:1217
+#: templates/js/translated/order.js:1323
msgid "Confirm receipt of items"
msgstr ""
-#: templates/js/translated/order.js:1218
+#: templates/js/translated/order.js:1324
msgid "Receive Purchase Order Items"
msgstr ""
-#: templates/js/translated/order.js:1410 templates/js/translated/part.js:870
+#: templates/js/translated/order.js:1516 templates/js/translated/part.js:870
msgid "No purchase orders found"
msgstr ""
-#: templates/js/translated/order.js:1435 templates/js/translated/order.js:2120
+#: templates/js/translated/order.js:1541 templates/js/translated/order.js:2226
msgid "Order is overdue"
msgstr ""
-#: templates/js/translated/order.js:1485 templates/js/translated/order.js:2185
-#: templates/js/translated/order.js:2315
+#: templates/js/translated/order.js:1591 templates/js/translated/order.js:2291
+#: templates/js/translated/order.js:2421
msgid "Items"
msgstr ""
-#: templates/js/translated/order.js:1559 templates/js/translated/order.js:3292
+#: templates/js/translated/order.js:1665 templates/js/translated/order.js:3447
msgid "Duplicate Line Item"
msgstr ""
-#: templates/js/translated/order.js:1576 templates/js/translated/order.js:3314
+#: templates/js/translated/order.js:1682 templates/js/translated/order.js:3469
msgid "Edit Line Item"
msgstr ""
-#: templates/js/translated/order.js:1589 templates/js/translated/order.js:3325
+#: templates/js/translated/order.js:1695 templates/js/translated/order.js:3480
msgid "Delete Line Item"
msgstr ""
-#: templates/js/translated/order.js:1632
+#: templates/js/translated/order.js:1738
msgid "No line items found"
msgstr ""
-#: templates/js/translated/order.js:1659 templates/js/translated/order.js:3049
+#: templates/js/translated/order.js:1765 templates/js/translated/order.js:3204
msgid "Total"
msgstr ""
-#: templates/js/translated/order.js:1713 templates/js/translated/order.js:1915
-#: templates/js/translated/order.js:3074 templates/js/translated/order.js:3557
+#: templates/js/translated/order.js:1819 templates/js/translated/order.js:2021
+#: templates/js/translated/order.js:3229 templates/js/translated/order.js:3714
#: templates/js/translated/part.js:1948 templates/js/translated/part.js:2301
msgid "Unit Price"
msgstr "单价"
-#: templates/js/translated/order.js:1728 templates/js/translated/order.js:1931
-#: templates/js/translated/order.js:3090 templates/js/translated/order.js:3573
+#: templates/js/translated/order.js:1834 templates/js/translated/order.js:2037
+#: templates/js/translated/order.js:3245 templates/js/translated/order.js:3730
msgid "Total Price"
msgstr ""
-#: templates/js/translated/order.js:1769 templates/js/translated/order.js:3132
+#: templates/js/translated/order.js:1875 templates/js/translated/order.js:3287
#: templates/js/translated/part.js:979
msgid "This line item is overdue"
msgstr ""
-#: templates/js/translated/order.js:1828 templates/js/translated/part.js:1025
+#: templates/js/translated/order.js:1934 templates/js/translated/part.js:1025
msgid "Receive line item"
msgstr ""
-#: templates/js/translated/order.js:1832 templates/js/translated/order.js:3246
+#: templates/js/translated/order.js:1938 templates/js/translated/order.js:3401
msgid "Duplicate line item"
msgstr ""
-#: templates/js/translated/order.js:1833 templates/js/translated/order.js:3247
+#: templates/js/translated/order.js:1939 templates/js/translated/order.js:3402
msgid "Edit line item"
msgstr ""
-#: templates/js/translated/order.js:1834 templates/js/translated/order.js:3251
+#: templates/js/translated/order.js:1940 templates/js/translated/order.js:3406
msgid "Delete line item"
msgstr ""
-#: templates/js/translated/order.js:1980 templates/js/translated/order.js:3622
+#: templates/js/translated/order.js:2086 templates/js/translated/order.js:3779
msgid "Duplicate line"
msgstr ""
-#: templates/js/translated/order.js:1981 templates/js/translated/order.js:3623
+#: templates/js/translated/order.js:2087 templates/js/translated/order.js:3780
msgid "Edit line"
msgstr ""
-#: templates/js/translated/order.js:1982 templates/js/translated/order.js:3624
+#: templates/js/translated/order.js:2088 templates/js/translated/order.js:3781
msgid "Delete line"
msgstr ""
-#: templates/js/translated/order.js:2012 templates/js/translated/order.js:3654
+#: templates/js/translated/order.js:2118 templates/js/translated/order.js:3811
msgid "Duplicate Line"
msgstr ""
-#: templates/js/translated/order.js:2033 templates/js/translated/order.js:3675
+#: templates/js/translated/order.js:2139 templates/js/translated/order.js:3832
msgid "Edit Line"
msgstr ""
-#: templates/js/translated/order.js:2044 templates/js/translated/order.js:3686
+#: templates/js/translated/order.js:2150 templates/js/translated/order.js:3843
msgid "Delete Line"
msgstr ""
-#: templates/js/translated/order.js:2055
+#: templates/js/translated/order.js:2161
msgid "No matching line"
msgstr ""
-#: templates/js/translated/order.js:2096
+#: templates/js/translated/order.js:2202
msgid "No sales orders found"
msgstr ""
-#: templates/js/translated/order.js:2134
+#: templates/js/translated/order.js:2240
msgid "Invalid Customer"
msgstr ""
-#: templates/js/translated/order.js:2221
+#: templates/js/translated/order.js:2327
msgid "Edit shipment"
msgstr ""
-#: templates/js/translated/order.js:2224
+#: templates/js/translated/order.js:2330
msgid "Complete shipment"
msgstr ""
-#: templates/js/translated/order.js:2229
+#: templates/js/translated/order.js:2335
msgid "Delete shipment"
msgstr ""
-#: templates/js/translated/order.js:2249
+#: templates/js/translated/order.js:2355
msgid "Edit Shipment"
msgstr ""
-#: templates/js/translated/order.js:2266
+#: templates/js/translated/order.js:2372
msgid "Delete Shipment"
msgstr ""
-#: templates/js/translated/order.js:2300
+#: templates/js/translated/order.js:2406
msgid "No matching shipments found"
msgstr ""
-#: templates/js/translated/order.js:2310
+#: templates/js/translated/order.js:2416
msgid "Shipment Reference"
msgstr ""
-#: templates/js/translated/order.js:2334
+#: templates/js/translated/order.js:2440
msgid "Not shipped"
msgstr ""
-#: templates/js/translated/order.js:2340
+#: templates/js/translated/order.js:2446
msgid "Tracking"
msgstr ""
-#: templates/js/translated/order.js:2499
+#: templates/js/translated/order.js:2603
+msgid "Add Shipment"
+msgstr ""
+
+#: templates/js/translated/order.js:2654
msgid "Confirm stock allocation"
msgstr "确认库存分配"
-#: templates/js/translated/order.js:2500
+#: templates/js/translated/order.js:2655
msgid "Allocate Stock Items to Sales Order"
msgstr ""
-#: templates/js/translated/order.js:2708
+#: templates/js/translated/order.js:2863
msgid "No sales order allocations found"
msgstr ""
-#: templates/js/translated/order.js:2789
+#: templates/js/translated/order.js:2944
msgid "Edit Stock Allocation"
msgstr ""
-#: templates/js/translated/order.js:2806
+#: templates/js/translated/order.js:2961
msgid "Confirm Delete Operation"
msgstr "确认删除操作"
-#: templates/js/translated/order.js:2807
+#: templates/js/translated/order.js:2962
msgid "Delete Stock Allocation"
msgstr ""
-#: templates/js/translated/order.js:2850 templates/js/translated/order.js:2939
+#: templates/js/translated/order.js:3005 templates/js/translated/order.js:3094
#: templates/js/translated/stock.js:1545
msgid "Shipped to customer"
msgstr ""
-#: templates/js/translated/order.js:2858 templates/js/translated/order.js:2948
+#: templates/js/translated/order.js:3013 templates/js/translated/order.js:3103
msgid "Stock location not specified"
msgstr ""
-#: templates/js/translated/order.js:3230
+#: templates/js/translated/order.js:3385
msgid "Allocate serial numbers"
msgstr ""
-#: templates/js/translated/order.js:3236
+#: templates/js/translated/order.js:3391
msgid "Purchase stock"
msgstr ""
-#: templates/js/translated/order.js:3243 templates/js/translated/order.js:3439
+#: templates/js/translated/order.js:3398 templates/js/translated/order.js:3596
msgid "Calculate price"
msgstr ""
-#: templates/js/translated/order.js:3255
+#: templates/js/translated/order.js:3410
msgid "Cannot be deleted as items have been shipped"
msgstr ""
-#: templates/js/translated/order.js:3258
+#: templates/js/translated/order.js:3413
msgid "Cannot be deleted as items have been allocated"
msgstr ""
-#: templates/js/translated/order.js:3340
+#: templates/js/translated/order.js:3495
msgid "Allocate Serial Numbers"
msgstr ""
-#: templates/js/translated/order.js:3447
+#: templates/js/translated/order.js:3604
msgid "Update Unit Price"
msgstr ""
-#: templates/js/translated/order.js:3461
+#: templates/js/translated/order.js:3618
msgid "No matching line items"
msgstr ""
-#: templates/js/translated/order.js:3697
+#: templates/js/translated/order.js:3854
msgid "No matching lines"
msgstr ""
@@ -9486,7 +9507,7 @@ msgstr ""
msgid "Add Stock"
msgstr ""
-#: templates/js/translated/stock.js:887 users/models.py:218
+#: templates/js/translated/stock.js:887 users/models.py:216
msgid "Add"
msgstr "添加"
@@ -10201,58 +10222,59 @@ msgstr "确定"
msgid "No"
msgstr "取消"
-#: users/admin.py:62
+#: users/admin.py:61
msgid "Users"
msgstr "用户"
-#: users/admin.py:63
+#: users/admin.py:62
msgid "Select which users are assigned to this group"
msgstr "选择分配给该组的用户"
-#: users/admin.py:185
+#: users/admin.py:184
msgid "The following users are members of multiple groups:"
msgstr "以下用户是多个群组的成员:"
-#: users/admin.py:208
+#: users/admin.py:207
msgid "Personal info"
msgstr "个人资料"
-#: users/admin.py:209
+#: users/admin.py:208
msgid "Permissions"
msgstr "权限"
-#: users/admin.py:212
+#: users/admin.py:211
msgid "Important dates"
msgstr "重要日期"
-#: users/models.py:205
+#: users/models.py:203
msgid "Permission set"
msgstr "权限设置"
-#: users/models.py:213
+#: users/models.py:211
msgid "Group"
msgstr "群组"
-#: users/models.py:216
+#: users/models.py:214
msgid "View"
msgstr "视图"
-#: users/models.py:216
+#: users/models.py:214
msgid "Permission to view items"
msgstr "查看项目权限"
-#: users/models.py:218
+#: users/models.py:216
msgid "Permission to add items"
msgstr "添加项目权限"
-#: users/models.py:220
+#: users/models.py:218
msgid "Change"
msgstr "更改"
-#: users/models.py:220
+#: users/models.py:218
msgid "Permissions to edit items"
msgstr "编辑项目权限"
-#: users/models.py:222
+#: users/models.py:220
msgid "Permission to delete items"
msgstr "删除项目权限"
+
diff --git a/InvenTree/order/models.py b/InvenTree/order/models.py
index 204130578f..550070e5df 100644
--- a/InvenTree/order/models.py
+++ b/InvenTree/order/models.py
@@ -1205,14 +1205,23 @@ class SalesOrderShipment(models.Model):
def is_complete(self):
return self.shipment_date is not None
- def check_can_complete(self):
+ def check_can_complete(self, raise_error=True):
- if self.shipment_date:
- # Shipment has already been sent!
- raise ValidationError(_("Shipment has already been sent"))
+ try:
+ if self.shipment_date:
+ # Shipment has already been sent!
+ raise ValidationError(_("Shipment has already been sent"))
- if self.allocations.count() == 0:
- raise ValidationError(_("Shipment has no allocated stock items"))
+ if self.allocations.count() == 0:
+ raise ValidationError(_("Shipment has no allocated stock items"))
+
+ except ValidationError as e:
+ if raise_error:
+ raise e
+ else:
+ return False
+
+ return True
@transaction.atomic
def complete_shipment(self, user, **kwargs):
@@ -1235,7 +1244,7 @@ class SalesOrderShipment(models.Model):
allocation.complete_allocation(user)
# Update the "shipment" date
- self.shipment_date = datetime.now()
+ self.shipment_date = kwargs.get('shipment_date', datetime.now())
self.shipped_by = user
# Was a tracking number provided?
diff --git a/InvenTree/order/serializers.py b/InvenTree/order/serializers.py
index 379b9d5fc4..685697f99f 100644
--- a/InvenTree/order/serializers.py
+++ b/InvenTree/order/serializers.py
@@ -2,6 +2,7 @@
JSON serializers for the Order API
"""
+from datetime import datetime
from decimal import Decimal
from django.core.exceptions import ValidationError as DjangoValidationError
@@ -899,6 +900,7 @@ class SalesOrderShipmentCompleteSerializer(serializers.ModelSerializer):
fields = [
'tracking_number',
+ 'shipment_date',
]
def validate(self, data):
@@ -910,7 +912,7 @@ class SalesOrderShipmentCompleteSerializer(serializers.ModelSerializer):
if not shipment:
raise ValidationError(_("No shipment details provided"))
- shipment.check_can_complete()
+ shipment.check_can_complete(raise_error=True)
return data
@@ -927,9 +929,16 @@ class SalesOrderShipmentCompleteSerializer(serializers.ModelSerializer):
user = request.user
# Extract provided tracking number (optional)
- tracking_number = data.get('tracking_number', None)
+ tracking_number = data.get('tracking_number', shipment.tracking_number)
- shipment.complete_shipment(user, tracking_number=tracking_number)
+ # Extract shipping date (defaults to today's date)
+ shipment_date = data.get('shipment_date', datetime.now())
+
+ shipment.complete_shipment(
+ user,
+ tracking_number=tracking_number,
+ shipment_date=shipment_date,
+ )
class SalesOrderShipmentAllocationItemSerializer(serializers.Serializer):
diff --git a/InvenTree/order/test_api.py b/InvenTree/order/test_api.py
index ba95a243f0..dd17a033c9 100644
--- a/InvenTree/order/test_api.py
+++ b/InvenTree/order/test_api.py
@@ -5,6 +5,7 @@ Tests for the Order API
import io
from datetime import datetime, timedelta
+from django.core.exceptions import ValidationError
from django.urls import reverse
from rest_framework import status
@@ -1275,3 +1276,96 @@ class SalesOrderAllocateTest(OrderTest):
for line in self.order.lines.all():
self.assertEqual(line.allocations.count(), 1)
+
+ def test_shipment_complete(self):
+ """Test that we can complete a shipment via the API"""
+
+ url = reverse('api-so-shipment-ship', kwargs={'pk': self.shipment.pk})
+
+ self.assertFalse(self.shipment.is_complete())
+ self.assertFalse(self.shipment.check_can_complete(raise_error=False))
+
+ with self.assertRaises(ValidationError):
+ self.shipment.check_can_complete()
+
+ # Attempting to complete this shipment via the API should fail
+ response = self.post(
+ url, {},
+ expected_code=400
+ )
+
+ self.assertIn('Shipment has no allocated stock items', str(response.data))
+
+ # Allocate stock against this shipment
+ line = self.order.lines.first()
+ part = line.part
+
+ models.SalesOrderAllocation.objects.create(
+ shipment=self.shipment,
+ line=line,
+ item=part.stock_items.last(),
+ quantity=5
+ )
+
+ # Shipment should now be able to be completed
+ self.assertTrue(self.shipment.check_can_complete())
+
+ # Attempt with an invalid date
+ response = self.post(
+ url,
+ {
+ 'shipment_date': 'asfasd',
+ },
+ expected_code=400,
+ )
+
+ self.assertIn('Date has wrong format', str(response.data))
+
+ response = self.post(
+ url,
+ {
+ 'tracking_number': 'TRK12345',
+ 'shipment_date': '2020-12-05',
+ },
+ expected_code=201,
+ )
+
+ self.shipment.refresh_from_db()
+
+ self.assertTrue(self.shipment.is_complete())
+ self.assertEqual(self.shipment.tracking_number, 'TRK12345')
+
+ def test_sales_order_shipment_list(self):
+
+ url = reverse('api-so-shipment-list')
+
+ # Create some new shipments via the API
+ for order in models.SalesOrder.objects.all():
+
+ for idx in range(3):
+ self.post(
+ url,
+ {
+ 'order': order.pk,
+ 'reference': f"SH{idx + 1}",
+ 'tracking_number': f"TRK_{order.pk}_{idx}"
+ },
+ expected_code=201
+ )
+
+ # Filter API by order
+ response = self.get(
+ url,
+ {
+ 'order': order.pk,
+ },
+ expected_code=200,
+ )
+
+ # 3 shipments returned for each SalesOrder instance
+ self.assertGreaterEqual(len(response.data), 3)
+
+ # List *all* shipments
+ response = self.get(url, expected_code=200)
+
+ self.assertEqual(len(response.data), 1 + 3 * models.SalesOrder.objects.count())
diff --git a/InvenTree/part/test_part.py b/InvenTree/part/test_part.py
index e6d01e9aa9..d3b8e85a02 100644
--- a/InvenTree/part/test_part.py
+++ b/InvenTree/part/test_part.py
@@ -58,7 +58,7 @@ class TemplateTagTest(InvenTreeTestCase):
def test_hash(self):
result_hash = inventree_extras.inventree_commit_hash()
- if settings.DOCKER:
+ if settings.DOCKER: # pragma: no cover
# Testing inside docker environment *may* return an empty git commit hash
# In such a case, skip this check
pass
@@ -67,7 +67,7 @@ class TemplateTagTest(InvenTreeTestCase):
def test_date(self):
d = inventree_extras.inventree_commit_date()
- if settings.DOCKER:
+ if settings.DOCKER: # pragma: no cover
# Testing inside docker environment *may* return an empty git commit hash
# In such a case, skip this check
pass
diff --git a/InvenTree/plugin/apps.py b/InvenTree/plugin/apps.py
index 9f9cb15d1a..2a1ef9f71a 100644
--- a/InvenTree/plugin/apps.py
+++ b/InvenTree/plugin/apps.py
@@ -20,7 +20,7 @@ class PluginAppConfig(AppConfig):
def ready(self):
if settings.PLUGINS_ENABLED:
if not canAppAccessDatabase(allow_test=True):
- logger.info("Skipping plugin loading sequence")
+ logger.info("Skipping plugin loading sequence") # pragma: no cover
else:
logger.info('Loading InvenTree plugins')
@@ -48,4 +48,4 @@ class PluginAppConfig(AppConfig):
log_error(_('Your enviroment has an outdated git version. This prevents InvenTree from loading plugin details.'), 'load')
else:
- logger.info("Plugins not enabled - skipping loading sequence")
+ logger.info("Plugins not enabled - skipping loading sequence") # pragma: no cover
diff --git a/InvenTree/plugin/base/event/events.py b/InvenTree/plugin/base/event/events.py
index d2294b4416..d870269736 100644
--- a/InvenTree/plugin/base/event/events.py
+++ b/InvenTree/plugin/base/event/events.py
@@ -26,9 +26,10 @@ def trigger_event(event, *args, **kwargs):
if not settings.PLUGINS_ENABLED:
# Do nothing if plugins are not enabled
- return
+ return # pragma: no cover
- if not canAppAccessDatabase():
+ # Make sure the database can be accessed and is not beeing tested rn
+ if not canAppAccessDatabase() and not settings.PLUGIN_TESTING_EVENTS:
logger.debug(f"Ignoring triggered event '{event}' - database not ready")
return
@@ -91,7 +92,7 @@ def process_event(plugin_slug, event, *args, **kwargs):
plugin = registry.plugins.get(plugin_slug, None)
- if plugin is None:
+ if plugin is None: # pragma: no cover
logger.error(f"Could not find matching plugin for '{plugin_slug}'")
return
@@ -106,7 +107,7 @@ def allow_table_event(table_name):
if isImportingData():
# Prevent table events during the data import process
- return False
+ return False # pragma: no cover
table_name = table_name.lower().strip()
diff --git a/InvenTree/plugin/base/integration/mixins.py b/InvenTree/plugin/base/integration/mixins.py
index 18b4cb0fd4..4cd2123ef3 100644
--- a/InvenTree/plugin/base/integration/mixins.py
+++ b/InvenTree/plugin/base/integration/mixins.py
@@ -57,10 +57,10 @@ class SettingsMixin:
except (OperationalError, ProgrammingError): # pragma: no cover
plugin = None
- if not plugin:
+ if not plugin: # pragma: no cover
# Cannot find associated plugin model, return
logger.error(f"Plugin configuration not found for plugin '{self.slug}'")
- return # pragma: no cover
+ return
PluginSetting.set_setting(key, value, user, plugin=plugin)
@@ -541,7 +541,7 @@ class PanelMixin:
def get_custom_panels(self, view, request):
""" This method *must* be implemented by the plugin class """
- raise NotImplementedError(f"{__class__} is missing the 'get_custom_panels' method")
+ raise MixinNotImplementedError(f"{__class__} is missing the 'get_custom_panels' method")
def get_panel_context(self, view, request, context):
"""
@@ -559,7 +559,7 @@ class PanelMixin:
try:
context['object'] = view.get_object()
- except AttributeError:
+ except AttributeError: # pragma: no cover
pass
return context
diff --git a/InvenTree/plugin/base/integration/test_mixins.py b/InvenTree/plugin/base/integration/test_mixins.py
index 9759e0f00d..e91f4da365 100644
--- a/InvenTree/plugin/base/integration/test_mixins.py
+++ b/InvenTree/plugin/base/integration/test_mixins.py
@@ -8,6 +8,7 @@ from error_report.models import Error
from InvenTree.helpers import InvenTreeTestCase
from plugin import InvenTreePlugin
+from plugin.base.integration.mixins import PanelMixin
from plugin.helpers import MixinNotImplementedError
from plugin.mixins import (APICallMixin, AppMixin, NavigationMixin,
SettingsMixin, UrlsMixin)
@@ -324,7 +325,7 @@ class PanelMixinTests(InvenTreeTestCase):
urls = [
reverse('part-detail', kwargs={'pk': 1}),
reverse('stock-item-detail', kwargs={'pk': 2}),
- reverse('stock-location-detail', kwargs={'pk': 1}),
+ reverse('stock-location-detail', kwargs={'pk': 2}),
]
plugin.set_setting('ENABLE_HELLO_WORLD', False)
@@ -379,3 +380,13 @@ class PanelMixinTests(InvenTreeTestCase):
# Assert that each request threw an error
self.assertEqual(Error.objects.count(), n_errors + len(urls))
+
+ def test_mixin(self):
+ """Test that ImplementationError is raised"""
+
+ with self.assertRaises(MixinNotImplementedError):
+ class Wrong(PanelMixin, InvenTreePlugin):
+ pass
+
+ plugin = Wrong()
+ plugin.get_custom_panels('abc', 'abc')
diff --git a/InvenTree/plugin/base/label/label.py b/InvenTree/plugin/base/label/label.py
index daaaaedbe2..d85251dd81 100644
--- a/InvenTree/plugin/base/label/label.py
+++ b/InvenTree/plugin/base/label/label.py
@@ -26,13 +26,13 @@ def print_label(plugin_slug, label_image, label_instance=None, user=None):
plugin = registry.plugins.get(plugin_slug, None)
- if plugin is None:
+ if plugin is None: # pragma: no cover
logger.error(f"Could not find matching plugin for '{plugin_slug}'")
return
try:
plugin.print_label(label_image, width=label_instance.width, height=label_instance.height)
- except Exception as e:
+ except Exception as e: # pragma: no cover
# Plugin threw an error - notify the user who attempted to print
ctx = {
diff --git a/InvenTree/plugin/base/label/test_label_mixin.py b/InvenTree/plugin/base/label/test_label_mixin.py
new file mode 100644
index 0000000000..29250f76a5
--- /dev/null
+++ b/InvenTree/plugin/base/label/test_label_mixin.py
@@ -0,0 +1,209 @@
+"""Unit tests for the label printing mixin"""
+
+from django.apps import apps
+from django.urls import reverse
+
+from common.models import InvenTreeSetting
+from InvenTree.api_tester import InvenTreeAPITestCase
+from label.models import PartLabel, StockItemLabel, StockLocationLabel
+from part.models import Part
+from plugin.base.label.mixins import LabelPrintingMixin
+from plugin.helpers import MixinNotImplementedError
+from plugin.plugin import InvenTreePlugin
+from plugin.registry import registry
+from stock.models import StockItem, StockLocation
+
+
+class LabelMixinTests(InvenTreeAPITestCase):
+ """Test that the Label mixin operates correctly"""
+
+ fixtures = [
+ 'category',
+ 'part',
+ 'location',
+ 'stock',
+ ]
+
+ roles = 'all'
+
+ def do_activate_plugin(self):
+ """Activate the 'samplelabel' plugin"""
+
+ config = registry.get_plugin('samplelabel').plugin_config()
+ config.active = True
+ config.save()
+
+ def do_url(self, parts, plugin_ref, label, url_name: str = 'api-part-label-print', url_single: str = 'part', invalid: bool = False):
+ """Generate an URL to print a label"""
+ # Construct URL
+ kwargs = {}
+ if label:
+ kwargs["pk"] = label.pk
+
+ url = reverse(url_name, kwargs=kwargs)
+
+ # Append part filters
+ if not parts:
+ pass
+ elif len(parts) == 1:
+ url += f'?{url_single}={parts[0].pk}'
+ elif len(parts) > 1:
+ url += '?' + '&'.join([f'{url_single}s={item.pk}' for item in parts])
+
+ # Append an invalid item
+ if invalid:
+ url += f'&{url_single}{"s" if len(parts) > 1 else ""}=abc'
+
+ # Append plugin reference
+ if plugin_ref:
+ url += f'&plugin={plugin_ref}'
+
+ return url
+
+ def test_wrong_implementation(self):
+ """Test that a wrong implementation raises an error"""
+
+ class WrongPlugin(LabelPrintingMixin, InvenTreePlugin):
+ pass
+
+ with self.assertRaises(MixinNotImplementedError):
+ plugin = WrongPlugin()
+ plugin.print_label('test')
+
+ def test_installed(self):
+ """Test that the sample printing plugin is installed"""
+
+ # Get all label plugins
+ plugins = registry.with_mixin('labels')
+ self.assertEqual(len(plugins), 1)
+
+ # But, it is not 'active'
+ plugins = registry.with_mixin('labels', active=True)
+ self.assertEqual(len(plugins), 0)
+
+ def test_api(self):
+ """Test that we can filter the API endpoint by mixin"""
+
+ url = reverse('api-plugin-list')
+
+ # Try POST (disallowed)
+ response = self.client.post(url, {})
+ self.assertEqual(response.status_code, 405)
+
+ response = self.client.get(
+ url,
+ {
+ 'mixin': 'labels',
+ 'active': True,
+ }
+ )
+
+ # No results matching this query!
+ self.assertEqual(len(response.data), 0)
+
+ # What about inactive?
+ response = self.client.get(
+ url,
+ {
+ 'mixin': 'labels',
+ 'active': False,
+ }
+ )
+
+ self.assertEqual(len(response.data), 0)
+
+ self.do_activate_plugin()
+ # Should be available via the API now
+ response = self.client.get(
+ url,
+ {
+ 'mixin': 'labels',
+ 'active': True,
+ }
+ )
+
+ self.assertEqual(len(response.data), 1)
+ data = response.data[0]
+ self.assertEqual(data['key'], 'samplelabel')
+
+ def test_printing_process(self):
+ """Test that a label can be printed"""
+
+ # Ensure the labels were created
+ apps.get_app_config('label').create_labels()
+
+ # Lookup references
+ part = Part.objects.first()
+ plugin_ref = 'samplelabel'
+ label = PartLabel.objects.first()
+
+ url = self.do_url([part], plugin_ref, label)
+
+ # Non-exsisting plugin
+ response = self.get(f'{url}123', expected_code=404)
+ self.assertIn(f'Plugin \'{plugin_ref}123\' not found', str(response.content, 'utf8'))
+
+ # Inactive plugin
+ response = self.get(url, expected_code=400)
+ self.assertIn(f'Plugin \'{plugin_ref}\' is not enabled', str(response.content, 'utf8'))
+
+ # Active plugin
+ self.do_activate_plugin()
+
+ # Print one part
+ self.get(url, expected_code=200)
+
+ # Print multiple parts
+ self.get(self.do_url(Part.objects.all()[:2], plugin_ref, label), expected_code=200)
+
+ # Print multiple parts without a plugin
+ self.get(self.do_url(Part.objects.all()[:2], None, label), expected_code=200)
+
+ # Print multiple parts without a plugin in debug mode
+ InvenTreeSetting.set_setting('REPORT_DEBUG_MODE', True, None)
+ response = self.get(self.do_url(Part.objects.all()[:2], None, label), expected_code=200)
+ self.assertIn('@page', str(response.content))
+
+ # Print no part
+ self.get(self.do_url(None, plugin_ref, label), expected_code=400)
+
+ def test_printing_endpoints(self):
+ """Cover the endpoints not covered by `test_printing_process`"""
+ plugin_ref = 'samplelabel'
+
+ # Activate the label components
+ apps.get_app_config('label').create_labels()
+ self.do_activate_plugin()
+
+ def run_print_test(label, qs, url_name, url_single):
+ """Run tests on single and multiple page printing
+
+ Args:
+ label (_type_): class of the label
+ qs (_type_): class of the base queryset
+ url_name (_type_): url for endpoints
+ url_single (_type_): item lookup reference
+ """
+ label = label.objects.first()
+ qs = qs.objects.all()
+
+ # List endpoint
+ self.get(self.do_url(None, None, None, f'{url_name}-list', url_single), expected_code=200)
+
+ # List endpoint with filter
+ self.get(self.do_url(qs[:2], None, None, f'{url_name}-list', url_single, invalid=True), expected_code=200)
+
+ # Single page printing
+ self.get(self.do_url(qs[:1], plugin_ref, label, f'{url_name}-print', url_single), expected_code=200)
+
+ # Multi page printing
+ self.get(self.do_url(qs[:2], plugin_ref, label, f'{url_name}-print', url_single), expected_code=200)
+
+ # Test StockItemLabels
+ run_print_test(StockItemLabel, StockItem, 'api-stockitem-label', 'item')
+
+ # Test StockLocationLabels
+ run_print_test(StockLocationLabel, StockLocation, 'api-stocklocation-label', 'location')
+
+ # Test PartLabels
+ run_print_test(PartLabel, Part, 'api-part-label', 'part')
diff --git a/InvenTree/plugin/base/locate/mixins.py b/InvenTree/plugin/base/locate/mixins.py
index 3f91b998c5..5d804b70f2 100644
--- a/InvenTree/plugin/base/locate/mixins.py
+++ b/InvenTree/plugin/base/locate/mixins.py
@@ -2,7 +2,7 @@
import logging
-from plugin.helpers import MixinImplementationError
+from plugin.helpers import MixinNotImplementedError
logger = logging.getLogger('inventree')
@@ -58,7 +58,7 @@ class LocateMixin:
if item.in_stock and item.location is not None:
self.locate_stock_location(item.location.pk)
- except StockItem.DoesNotExist:
+ except StockItem.DoesNotExist: # pragma: no cover
logger.warning("LocateMixin: StockItem pk={item_pk} not found")
pass
@@ -71,4 +71,4 @@ class LocateMixin:
Note: The default implementation here does nothing!
"""
- raise MixinImplementationError
+ raise MixinNotImplementedError
diff --git a/InvenTree/plugin/base/locate/test_locate.py b/InvenTree/plugin/base/locate/test_locate.py
index 361b791c4b..96dfca7cb1 100644
--- a/InvenTree/plugin/base/locate/test_locate.py
+++ b/InvenTree/plugin/base/locate/test_locate.py
@@ -5,7 +5,8 @@ Unit tests for the 'locate' plugin mixin class
from django.urls import reverse
from InvenTree.api_tester import InvenTreeAPITestCase
-from plugin.registry import registry
+from plugin import InvenTreePlugin, MixinNotImplementedError, registry
+from plugin.base.locate.mixins import LocateMixin
from stock.models import StockItem, StockLocation
@@ -145,3 +146,17 @@ class LocatePluginTests(InvenTreeAPITestCase):
# Item metadata should have been altered!
self.assertTrue(location.metadata['located'])
+
+ def test_mixin_locate(self):
+ """Test the sample mixin redirection"""
+ class SamplePlugin(LocateMixin, InvenTreePlugin):
+ pass
+
+ plugin = SamplePlugin()
+
+ # Test that the request is patched through to location
+ with self.assertRaises(MixinNotImplementedError):
+ plugin.locate_stock_item(1)
+
+ # Test that it runs through
+ plugin.locate_stock_item(999)
diff --git a/InvenTree/plugin/samples/event/event_sample.py b/InvenTree/plugin/samples/event/event_sample.py
index bea21c3ea0..acddbf95c6 100644
--- a/InvenTree/plugin/samples/event/event_sample.py
+++ b/InvenTree/plugin/samples/event/event_sample.py
@@ -2,6 +2,10 @@
Sample plugin which responds to events
"""
+import warnings
+
+from django.conf import settings
+
from plugin import InvenTreePlugin
from plugin.mixins import EventMixin
@@ -21,3 +25,7 @@ class EventPluginSample(EventMixin, InvenTreePlugin):
print(f"Processing triggered event: '{event}'")
print("args:", str(args))
print("kwargs:", str(kwargs))
+
+ # Issue warning that we can test for
+ if settings.PLUGIN_TESTING:
+ warnings.warn(f'Event `{event}` triggered')
diff --git a/InvenTree/plugin/samples/event/test_event_sample.py b/InvenTree/plugin/samples/event/test_event_sample.py
new file mode 100644
index 0000000000..284b306a92
--- /dev/null
+++ b/InvenTree/plugin/samples/event/test_event_sample.py
@@ -0,0 +1,40 @@
+"""Unit tests for event_sample sample plugins"""
+
+from django.conf import settings
+from django.test import TestCase
+
+from plugin import InvenTreePlugin, registry
+from plugin.base.event.events import trigger_event
+from plugin.helpers import MixinNotImplementedError
+from plugin.mixins import EventMixin
+
+
+class EventPluginSampleTests(TestCase):
+ """Tests for EventPluginSample"""
+
+ def test_run_event(self):
+ """Check if the event is issued"""
+ # Activate plugin
+ config = registry.get_plugin('sampleevent').plugin_config()
+ config.active = True
+ config.save()
+
+ # Enable event testing
+ settings.PLUGIN_TESTING_EVENTS = True
+ # Check that an event is issued
+ with self.assertWarns(Warning) as cm:
+ trigger_event('test.event')
+ self.assertEqual(cm.warning.args[0], 'Event `test.event` triggered')
+
+ # Disable again
+ settings.PLUGIN_TESTING_EVENTS = False
+
+ def test_mixin(self):
+ """Test that MixinNotImplementedError is raised"""
+
+ with self.assertRaises(MixinNotImplementedError):
+ class Wrong(EventMixin, InvenTreePlugin):
+ pass
+
+ plugin = Wrong()
+ plugin.process_event('abc')
diff --git a/InvenTree/plugin/samples/integration/custom_panel_sample.py b/InvenTree/plugin/samples/integration/custom_panel_sample.py
index cb1a938504..3671dc532e 100644
--- a/InvenTree/plugin/samples/integration/custom_panel_sample.py
+++ b/InvenTree/plugin/samples/integration/custom_panel_sample.py
@@ -120,7 +120,7 @@ class CustomPanelSample(PanelMixin, SettingsMixin, InvenTreePlugin):
'icon': 'fa-user',
'content_template': 'panel_demo/childless.html', # Note that the panel content is rendered using a template file!
})
- except:
+ except: # pragma: no cover
pass
return panels
diff --git a/InvenTree/plugin/samples/integration/label_sample.py b/InvenTree/plugin/samples/integration/label_sample.py
new file mode 100644
index 0000000000..845e1b7908
--- /dev/null
+++ b/InvenTree/plugin/samples/integration/label_sample.py
@@ -0,0 +1,18 @@
+
+from plugin import InvenTreePlugin
+from plugin.mixins import LabelPrintingMixin
+
+
+class SampleLabelPrinter(LabelPrintingMixin, InvenTreePlugin):
+ """
+ Sample plugin which provides a 'fake' label printer endpoint
+ """
+
+ NAME = "Label Printer"
+ SLUG = "samplelabel"
+ TITLE = "Sample Label Printer"
+ DESCRIPTION = "A sample plugin which provides a (fake) label printer interface"
+ VERSION = "0.1"
+
+ def print_label(self, label, **kwargs):
+ print("OK PRINTING")
diff --git a/InvenTree/plugin/samples/locate/locate_sample.py b/InvenTree/plugin/samples/locate/locate_sample.py
index 99242ead35..d4ce411098 100644
--- a/InvenTree/plugin/samples/locate/locate_sample.py
+++ b/InvenTree/plugin/samples/locate/locate_sample.py
@@ -37,7 +37,7 @@ class SampleLocatePlugin(LocateMixin, InvenTreePlugin):
# Tag metadata
item.set_metadata('located', True)
- except (ValueError, StockItem.DoesNotExist):
+ except (ValueError, StockItem.DoesNotExist): # pragma: no cover
logger.error(f"StockItem ID {item_pk} does not exist!")
def locate_stock_location(self, location_pk):
@@ -53,5 +53,5 @@ class SampleLocatePlugin(LocateMixin, InvenTreePlugin):
# Tag metadata
location.set_metadata('located', True)
- except (ValueError, StockLocation.DoesNotExist):
+ except (ValueError, StockLocation.DoesNotExist): # pragma: no cover
logger.error(f"Location ID {location_pk} does not exist!")
diff --git a/InvenTree/plugin/samples/locate/test_locate_sample.py b/InvenTree/plugin/samples/locate/test_locate_sample.py
new file mode 100644
index 0000000000..fe7ba28cca
--- /dev/null
+++ b/InvenTree/plugin/samples/locate/test_locate_sample.py
@@ -0,0 +1,60 @@
+"""Unit tests for locate_sample sample plugins"""
+
+from django.urls import reverse
+
+from InvenTree.api_tester import InvenTreeAPITestCase
+from plugin import InvenTreePlugin, registry
+from plugin.helpers import MixinNotImplementedError
+from plugin.mixins import LocateMixin
+
+
+class SampleLocatePlugintests(InvenTreeAPITestCase):
+ """Tests for SampleLocatePlugin"""
+
+ fixtures = [
+ 'location',
+ 'category',
+ 'part',
+ 'stock'
+ ]
+
+ def test_run_locator(self):
+ """Check if the event is issued"""
+ # Activate plugin
+ config = registry.get_plugin('samplelocate').plugin_config()
+ config.active = True
+ config.save()
+
+ # Test APIs
+ url = reverse('api-locate-plugin')
+
+ # No plugin
+ self.post(url, {}, expected_code=400)
+
+ # Wrong plugin
+ self.post(url, {'plugin': 'sampleevent'}, expected_code=400)
+
+ # Right plugin - no search item
+ self.post(url, {'plugin': 'samplelocate'}, expected_code=400)
+
+ # Right plugin - wrong reference
+ self.post(url, {'plugin': 'samplelocate', 'item': 999}, expected_code=404)
+
+ # Right plugin - right reference
+ self.post(url, {'plugin': 'samplelocate', 'item': 1}, expected_code=200)
+
+ # Right plugin - wrong reference
+ self.post(url, {'plugin': 'samplelocate', 'location': 999}, expected_code=404)
+
+ # Right plugin - right reference
+ self.post(url, {'plugin': 'samplelocate', 'location': 1}, expected_code=200)
+
+ def test_mixin(self):
+ """Test that MixinNotImplementedError is raised"""
+
+ with self.assertRaises(MixinNotImplementedError):
+ class Wrong(LocateMixin, InvenTreePlugin):
+ pass
+
+ plugin = Wrong()
+ plugin.locate_stock_location(1)
diff --git a/InvenTree/stock/templates/stock/item_base.html b/InvenTree/stock/templates/stock/item_base.html
index 1e5abb7ebc..42c5df622d 100644
--- a/InvenTree/stock/templates/stock/item_base.html
+++ b/InvenTree/stock/templates/stock/item_base.html
@@ -156,158 +156,7 @@
{% endif %}
- {% if item.serialized %}
-
- |
- {% trans "Serial Number" %} |
-
- {{ item.serial }}
-
- |
-
- {% else %}
-
- |
- {% trans "Quantity" %} |
- {% decimal item.quantity %} {% if item.part.units %}{{ item.part.units }}{% endif %} |
-
- {% endif %}
-
- |
- {% trans "Status" %} |
- {% stock_status_label item.status %} |
-
- {% if item.expiry_date %}
-
- |
- {% trans "Expiry Date" %} |
-
- {% render_date item.expiry_date %}
- {% if item.is_expired %}
- {% trans "Expired" %}
- {% elif item.is_stale %}
- {% trans "Stale" %}
- {% endif %}
- |
-
- {% endif %}
-
- |
- {% trans "Last Updated" %} |
- {{ item.updated }} |
-
-
- |
- {% trans "Last Stocktake" %} |
- {% if item.stocktake_date %}
- {% render_date item.stocktake_date %} {{ item.stocktake_user }} |
- {% else %}
- {% trans "No stocktake performed" %} |
- {% endif %}
-
-
-
-
-
- {% if item.is_building %}
-
- {% trans "This stock item is in production and cannot be edited." %}
- {% trans "Edit the stock item from the build view." %}
-
- {% if item.build %}
-
- {{ item.build }}
-
- {% endif %}
-
-
- {% endif %}
-
- {% if item.hasRequiredTests and not item.passedAllRequiredTests %}
-
- {% trans "This stock item has not passed all required tests" %}
-
- {% endif %}
-
- {% for allocation in item.sales_order_allocations.all %}
-
- {% object_link 'so-detail' allocation.line.order.id allocation.line.order as link %}
- {% decimal allocation.quantity as qty %}
- {% trans "This stock item is allocated to Sales Order" %} {{ link }} {% if qty < item.quantity %}({% trans "Quantity" %}: {{ qty }}){% endif %}
-
- {% endfor %}
-
- {% for allocation in item.allocations.all %}
-
- {% object_link 'build-detail' allocation.build.id allocation.build as link %}
- {% decimal allocation.quantity as qty %}
- {% trans "This stock item is allocated to Build Order" %} {{ link }} {% if qty < item.quantity %}({% trans "Quantity" %}: {{ qty }}){% endif %}
-
- {% endfor %}
-
- {% if item.serialized %}
-
- {% trans "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." %}
-
- {% endif %}
-
-
-{% endblock details %}
-
-{% block details_right %}
-
-
-
- {% if item.customer %}
-
- |
- {% trans "Customer" %} |
- {{ item.customer.name }} |
-
- {% endif %}
- {% if item.belongs_to %}
-
- |
-
- {% trans "Installed In" %}
- |
-
- {{ item.belongs_to }}
- |
-
- {% elif item.sales_order %}
-
- |
- {% trans "Sales Order" %} |
- {{ item.sales_order.reference }} - {{ item.sales_order.customer.name }} |
-
- {% else %}
-
- |
- {% trans "Location" %} |
- {% if item.location %}
- {{ item.location.name }} |
- {% else %}
- {% trans "No location set" %} |
- {% endif %}
-
- {% endif %}
+
{% if item.uid %}
|
@@ -322,13 +171,6 @@
{{ item.batch }} |
{% endif %}
- {% if item.packaging %}
-
- |
- {% trans "Packaging" %} |
- {{ item.packaging }} |
-
- {% endif %}
{% if item.build %}
|
@@ -397,18 +239,11 @@
{{ item.supplier_part.SKU }} |
{% endif %}
- {% if item.hasRequiredTests %}
+ {% if item.packaging %}
- |
- {% trans "Tests" %} |
-
- {{ item.requiredTestStatus.passed }} / {{ item.requiredTestStatus.total }}
- {% if item.passedAllRequiredTests %}
-
- {% else %}
-
- {% endif %}
- |
+ |
+ {% trans "Packaging" %} |
+ {{ item.packaging }} |
{% endif %}
{% if ownership_enabled and item_owner %}
@@ -425,6 +260,199 @@
{% endif %}
+
+
+
+
+
+ {% if item.is_building %}
+
+ {% trans "This stock item is in production and cannot be edited." %}
+ {% trans "Edit the stock item from the build view." %}
+
+ {% if item.build %}
+
+ {{ item.build }}
+
+ {% endif %}
+
+
+ {% endif %}
+
+ {% if item.hasRequiredTests and not item.passedAllRequiredTests %}
+
+ {% trans "This stock item has not passed all required tests" %}
+
+ {% endif %}
+
+ {% for allocation in item.sales_order_allocations.all %}
+
+ {% object_link 'so-detail' allocation.line.order.id allocation.line.order as link %}
+ {% decimal allocation.quantity as qty %}
+ {% trans "This stock item is allocated to Sales Order" %} {{ link }} {% if qty < item.quantity %}({% trans "Quantity" %}: {{ qty }}){% endif %}
+
+ {% endfor %}
+
+ {% for allocation in item.allocations.all %}
+
+ {% object_link 'build-detail' allocation.build.id allocation.build as link %}
+ {% decimal allocation.quantity as qty %}
+ {% trans "This stock item is allocated to Build Order" %} {{ link }} {% if qty < item.quantity %}({% trans "Quantity" %}: {{ qty }}){% endif %}
+
+ {% endfor %}
+
+ {% if item.serialized %}
+
+ {% trans "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." %}
+
+ {% endif %}
+
+{% endblock details %}
+
+{% block details_right %}
+
+
+
+
+ {% if item.serialized %}
+
+
+ |
+
+ {% trans "Serial Number" %}
+ |
+
+ |
+ {% else %}
+
+
+ |
+
+ {% trans "Available Quantity" %}
+ |
+
+ {% if item.quantity != available %}{% decimal available %} / {% endif %}{% decimal item.quantity %} {% if item.part.units %}{{ item.part.units }}{% endif %}
+ |
+ {% endif %}
+
+ {% if item.belongs_to %}
+
+ |
+
+ {% trans "Installed In" %}
+ |
+
+ {{ item.belongs_to }}
+ |
+
+ {% elif item.sales_order %}
+
+ |
+ {% trans "Sales Order" %} |
+ {{ item.sales_order.reference }} - {{ item.sales_order.customer.name }} |
+
+ {% else %}
+ {% if allocated_to_sales_orders %}
+
+ |
+ {% trans "Allocated to Sales Orders" %} |
+ {% decimal allocated_to_sales_orders %} |
+
+ {% endif %}
+ {% if allocated_to_build_orders %}
+
+ |
+ {% trans "Allocated to Build Orders" %} |
+ {% decimal allocated_to_build_orders %} |
+
+ {% endif %}
+
+ |
+ {% trans "Location" %} |
+ {% if item.location %}
+ {{ item.location.name }} |
+ {% elif not item.customer %}
+ {% trans "No location set" %} |
+ {% endif %}
+
+ {% endif %}
+ {% if item.customer %}
+
+ |
+ {% trans "Customer" %} |
+ {{ item.customer.name }} |
+
+ {% endif %}
+
+ {% if item.hasRequiredTests %}
+
+ |
+ {% trans "Tests" %} |
+
+ {{ item.requiredTestStatus.passed }} / {{ item.requiredTestStatus.total }}
+ {% if item.passedAllRequiredTests %}
+
+ {% else %}
+
+ {% endif %}
+ |
+
+ {% endif %}
+
+
+ |
+ {% trans "Status" %} |
+ {% stock_status_label item.status %} |
+
+ {% if item.expiry_date %}
+
+ |
+ {% trans "Expiry Date" %} |
+
+ {% render_date item.expiry_date %}
+ {% if item.is_expired %}
+ {% trans "Expired" %}
+ {% elif item.is_stale %}
+ {% trans "Stale" %}
+ {% endif %}
+ |
+
+ {% endif %}
+
+ |
+ {% trans "Last Updated" %} |
+ {{ item.updated }} |
+
+
+ |
+ {% trans "Last Stocktake" %} |
+ {% if item.stocktake_date %}
+ {% render_date item.stocktake_date %} {{ item.stocktake_user }} |
+ {% else %}
+ {% trans "No stocktake performed" %} |
+ {% endif %}
+
+
+
{% endblock details_right %}
diff --git a/InvenTree/stock/views.py b/InvenTree/stock/views.py
index f38d1777a6..7a0f1ab978 100644
--- a/InvenTree/stock/views.py
+++ b/InvenTree/stock/views.py
@@ -94,6 +94,12 @@ class StockItemDetail(InvenTreeRoleMixin, InvenTreePluginViewMixin, DetailView):
data['item_owner'] = self.object.get_item_owner()
data['user_owns_item'] = self.object.check_ownership(self.request.user)
+ # Allocation information
+ data['allocated_to_sales_orders'] = self.object.sales_order_allocation_count()
+ data['allocated_to_build_orders'] = self.object.build_allocation_count()
+ data['allocated_to_orders'] = data['allocated_to_sales_orders'] + data['allocated_to_build_orders']
+ data['available'] = max(0, self.object.quantity - data['allocated_to_orders'])
+
return data
def get(self, request, *args, **kwargs):
diff --git a/InvenTree/templates/js/translated/order.js b/InvenTree/templates/js/translated/order.js
index ad9849edb8..5fa0d2f77a 100644
--- a/InvenTree/templates/js/translated/order.js
+++ b/InvenTree/templates/js/translated/order.js
@@ -129,7 +129,12 @@ function completeShipment(shipment_id, options={}) {
method: 'POST',
title: `{% trans "Complete Shipment" %} ${shipment.reference}`,
fields: {
- tracking_number: {},
+ tracking_number: {
+ value: shipment.tracking_number,
+ },
+ shipment_date: {
+ value: moment().format('YYYY-MM-DD'),
+ }
},
preFormContent: html,
confirm: true,
diff --git a/InvenTree/templates/js/translated/stock.js b/InvenTree/templates/js/translated/stock.js
index ffac1d58c2..f0b7b28a73 100644
--- a/InvenTree/templates/js/translated/stock.js
+++ b/InvenTree/templates/js/translated/stock.js
@@ -1698,13 +1698,22 @@ function loadStockTable(table, options) {
sortable: true,
formatter: function(value, row) {
- var val = parseFloat(value);
+ var val = '';
+
+ var available = Math.max(0, (row.quantity || 0) - (row.allocated || 0));
- // If there is a single unit with a serial number, use the serial number
if (row.serial && row.quantity == 1) {
+ // If there is a single unit with a serial number, use the serial number
val = '# ' + row.serial;
+ } else if (row.quantity != available) {
+ // Some quantity is available, show available *and* quantity
+ var ava = +parseFloat(available).toFixed(5);
+ var tot = +parseFloat(row.quantity).toFixed(5);
+
+ val = `${ava} / ${tot}`;
} else {
- val = +val.toFixed(5);
+ // Format floating point numbers with this one weird trick
+ val = +parseFloat(value).toFixed(5);
}
var html = renderLink(val, `/stock/item/${row.pk}/`);
@@ -1719,16 +1728,7 @@ function loadStockTable(table, options) {
} else if (row.customer) {
// StockItem has been assigned to a customer
html += makeIconBadge('fa-user', '{% trans "Stock item assigned to customer" %}');
- }
-
- if (row.expired) {
- html += makeIconBadge('fa-calendar-times icon-red', '{% trans "Stock item has expired" %}');
- } else if (row.stale) {
- html += makeIconBadge('fa-stopwatch', '{% trans "Stock item will expire soon" %}');
- }
-
- if (row.allocated) {
-
+ } else if (row.allocated) {
if (row.serial != null && row.quantity == 1) {
html += makeIconBadge('fa-bookmark icon-yellow', '{% trans "Serialized stock item has been allocated" %}');
} else if (row.allocated >= row.quantity) {
@@ -1736,10 +1736,14 @@ function loadStockTable(table, options) {
} else {
html += makeIconBadge('fa-bookmark', '{% trans "Stock item has been partially allocated" %}');
}
+ } else if (row.belongs_to) {
+ html += makeIconBadge('fa-box', '{% trans "Stock item has been installed in another item" %}');
}
- if (row.belongs_to) {
- html += makeIconBadge('fa-box', '{% trans "Stock item has been installed in another item" %}');
+ if (row.expired) {
+ html += makeIconBadge('fa-calendar-times icon-red', '{% trans "Stock item has expired" %}');
+ } else if (row.stale) {
+ html += makeIconBadge('fa-stopwatch', '{% trans "Stock item will expire soon" %}');
}
// Special stock status codes
diff --git a/InvenTree/users/tests.py b/InvenTree/users/tests.py
index 5678c8d6da..393b640d2e 100644
--- a/InvenTree/users/tests.py
+++ b/InvenTree/users/tests.py
@@ -180,11 +180,23 @@ class OwnerModelTest(InvenTreeTestCase):
group_as_owner = Owner.get_owner(self.group)
self.assertEqual(type(group_as_owner), Owner)
+ # Check name
+ self.assertEqual(str(user_as_owner), 'testuser (user)')
+
# Get related owners (user + group)
related_owners = group_as_owner.get_related_owners(include_group=True)
self.assertTrue(user_as_owner in related_owners)
self.assertTrue(group_as_owner in related_owners)
+ # Get related owners (only user)
+ related_owners = group_as_owner.get_related_owners(include_group=False)
+ self.assertTrue(user_as_owner in related_owners)
+ self.assertFalse(group_as_owner in related_owners)
+
+ # Get related owners on user
+ related_owners = user_as_owner.get_related_owners()
+ self.assertEqual(related_owners, [user_as_owner])
+
# Check owner matching
owners = Owner.get_owners_matching_user(self.user)
self.assertEqual(owners, [user_as_owner, group_as_owner])